springboot+mybatis+cucumber
Posted xiaodebing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot+mybatis+cucumber相关的知识,希望对你有一定的参考价值。
import org.junit.runner.RunWith; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; /** * @RunWith(Cucumber.class) 这是一个运行器 ,指用Cucumber来运行测试 * @CucumberOptions中的features,用于指定我们项目中要运行的feature的目录 * @CucumberOptions中的format,用于指定我们项目中要运行时生成的报告,并指定之后可以在target目录中找到对应的测试报告 * @CucumberOptions中的glue,用于指定项目运行时查找实现step定义文件的目录 * * 在实际项目中,随着项目的进行,一个测试工程可能由多个feature文件组成,并且每个feature文件中可能也是由多个scenario组成。默认情况下, * 每次运行是运行所有feature中的所有scenario。这样可能导致正常情况下运行一次测试脚本,需要非常长的时间来等待测试结果。 * 但是实际过程中,测试用例是有优先级等区分的。比如smokeTest、regressionTest等。或者有时候会有特别小部分的用例,比如等级是critical, * 这些用例需要长时间运行来监测系统是否没有白页或者页面404等现象。 * 所以我们必须区分开所有的scenario,可以使我们在启动测试脚本时,可以根据我们需要来运行哪些模块的scenaro。这时我们可以使用Tags * 在Cucumber里Tag是直接在Feature、Scenari或Scenario Outline关键字前给feature或scenario添加任意数量的前缀为@的tags,多个tag用空格来分隔 * */ @RunWith(Cucumber.class) @CucumberOptions( monochrome = true, strict = false, features = "classpath:features/", plugin = {"pretty","json:target/cucumber.json","html:target/test_report"} ) public class CSAppTest { public static void main(String[] args) { // TODO Auto-generated method stub } }
import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import com.alibaba.druid.pool.DruidDataSource; @Configuration @MapperScan(basePackages = "cn.x.x.dao.gringotts", sqlSessionFactoryRef = "gringottsSqlSessionFactory") public class GringottsDataSourcesConfig { @ConfigurationProperties("spring.datasource3") @Bean(name = "gringottsDataSource") public DruidDataSource druidDataSource() { return new DruidDataSource(); } @Bean(name = "gringottsTransactionManager") public DataSourceTransactionManager customTransactionManager() { return new DataSourceTransactionManager(druidDataSource()); } @Bean(name = "gringottsSqlSessionFactory") public SqlSessionFactory getSqlSessionFactory(@Qualifier("gringottsDataSource") DruidDataSource dataSource) throws Exception { final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean(); // sessionFactoryBean.setConfigLocation(new // ClassPathResource("mybatis-config.xml")); sessionFactoryBean.setDataSource(dataSource); return sessionFactoryBean.getObject(); } @Bean(name = "gringottsSqlSessionTemplate") public SqlSessionTemplate getSqlSessionTemplate(@Qualifier("gringottsSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.x</groupId> <artifactId>x</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java8</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-spring</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-junit</artifactId> <version>4.2.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.11.0</version> </dependency> <dependency> <groupId>com.squareup.okio</groupId> <artifactId>okio</artifactId> <version>1.14.0</version> </dependency> <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>org.conscrypt</groupId> <artifactId>conscrypt-openjdk-uber</artifactId> <version>1.1.4</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.12</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.12</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3</version> <type>jar</type> <scope>system</scope> <systemPath>${project.basedir}/libs/ojdbc6-11.2.0.3.jar</systemPath> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Random; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Scope; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONPath; import cucumber.api.PickleStepTestStep; import cucumber.api.Scenario; import cucumber.api.TestStep; import cucumber.api.java8.Zh_cn; import okhttp3.Response; //@SpringBootTest(classes = CSAppTest.class) @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @SpringBootTest public class RegisterStep implements Zh_cn{ Logger log = LoggerFactory.getLogger(getClass()); @Value("${app.server.ip}") String serverIp; @Autowired NameGenerator nameGenerator; private JsonRequest jsonRequest; private ArrayList<String> reportStr; public RegisterStep() { 当("获得一个未注册的并且前三位为(.+)的手机号码", (String mobilePrefix) -> { MoblieGenerator moblieGenerator= new MoblieGenerator(); String randomMobile = moblieGenerator.getRandomMobile(mobilePrefix); //检查这个手机号是否已注册,获得一个未被使用过的 while(regUtil.getMoblieCount(randomMobile) != 0) { randomMobile = moblieGenerator.getRandomMobile(mobilePrefix); log.info("while中的randomMobile:{}",randomMobile); } //放到列表中,在after中输出到报告里面 reportStr.add(randomMobile); testParam.put("randomMobile", randomMobile); log.info("randomMobile:{}",randomMobile); }); Before(new String[]{"@reg_test"},(Scenario scenario) -> { reportStr = new ArrayList<String>(); }); After(new String[]{"@reg_test"}, (Scenario scenario) -> { reportStr.forEach(repStr -> scenario.embed(repStr.getBytes(Charset.forName("utf-8")),"text/plain")); }); } }
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.alibaba.druid.support.http.StatViewServlet; import com.alibaba.druid.support.http.WebStatFilter; @Configuration public class DruidConfig { @Bean public ServletRegistrationBean druidServlet() { ServletRegistrationBean reg = new ServletRegistrationBean(); reg.setServlet(new StatViewServlet()); reg.addUrlMappings("/druid/*"); reg.addInitParameter("loginUsername", "admin"); reg.addInitParameter("loginPassword", "admin"); reg.addInitParameter("logSlowSql", "true"); return reg; } @Bean public FilterRegistrationBean filterRegistrationBean() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(new WebStatFilter()); filterRegistrationBean.addUrlPatterns("/*"); filterRegistrationBean.addInitParameter("profileEnable", "true"); return filterRegistrationBean; } }
以上是关于springboot+mybatis+cucumber的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Eclipse 中使用 Gradle 运行 Cucumber + Spring Boot 应用程序
从 Spring Boot 应用程序启动的 Cucumber 未在 jar 中找到胶水类
修复 IntelliJ IDEA 中 Cucumber 6.8.1运行找不到类的问题