为了实现自动化测试,springboot 项目需要集成cucumber,同时需要集成到持续开发工具Jenkins,实现打包–部署–测试自动化流程。无需人工进行测试。
1.pom文件导入jar包
<dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-java</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-spring</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-jvm</artifactId> <version>1.2.6</version> <type>pom</type> </dependency> dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-junit</artifactId> <version>1.2.6</version> <exclusions> <exclusion> <groupId>junit</groupId> <artifactId>junit</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>net.masterthought</groupId> <artifactId>cucumber-reporting</artifactId> <version>4.0.0</version> </dependency>如果需要实现json-schema自动校验返回结果,需要导入下面的jar包
<dependency> <groupId>com.jayway.restassured</groupId> <artifactId>rest-assured</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.jayway.restassured</groupId> <artifactId>json-schema-validator</artifactId> <version>2.9.0</version> </dependency>2.项目结果图
项目结构,只需关注test目录
3.cucumber启动类
@RunWith(Cucumber.class) @CucumberOptions(format = {"json:src/test/resources/report/cucumber.json"},features = { "src/test/resources/cucumber"}) public class CucumberRun { }测试结果会自动生成json文件并放在指定目录下 4.feature文件
#language: zh-CN 功能:测试登陆接口 场景: 测试登陆接口 当 调用了登陆接口<case1> 那么 返回结果验证成功<schema1>我们这里实现了比较复杂的逻辑,case1 请求入参,schema1校验json的脚本。 根据接口名+case1去读取请求文件json。 5. step文件
@当("^调用了(.+)接口<(.+)>$") public void whenRequestAPI(String apiName,String useCase) throws Throwable { this.res = invokeInterface(apiName,useCase); JSONObject targetJson = JSONObject.parseObject(res); Map<String,Object> targetData = JSONObject.toJavaObject(targetJson, Map.class); this.resData = targetData; }使用http请求去调用指定API地址,可以使用jason-schema对返回结果进行自动校验
String useCaseUrl = root + URLEncoder.encode(this.apiName + "-" + schemaName,"UTF-8") + ".json"; // 从远程接口读取返回值 String res = new String(sendGetRequest(useCaseUrl)); JsonNode mainNode = JsonLoader.fromString(res); JsonNode instanceNode = JsonLoader.fromString(this.res); JsonSchema schema = factory.getJsonSchema(mainNode); ProcessingReport processingReport = schema.validate(instanceNode); assertEquals(processingReport.isSuccess(),true); schema 文件 { "$schema": "http://json-schema.org/draft-04/schema#", "title": "登陆接口", "type": "object", "properties": { "data": { "type": "object", "properties": { "stuas": { "type": "string", "maxLength": 16 } }, "required": [ "record_no" ] } }, "required": [ "data" ] } 思路整理:feature文件用来编写接口的调用顺序和规定使用哪个请求文件和校验结果的schema文件。case文件是具体的请求数据。schema是按照schema规范书写的校验返回结果。这样就不用人工去判断返回的结果是否符合预期。下载插件 第一次下载应该在可安装插件里搜索cucumber
新建任务 这里选择了自由风格项目
源码配置
构建触发器
延迟构建 这里通过ssh连接到任意服务器,执行sleep 1m,睡眠一分钟,再去执行test,为了等待项目启动完成。项目启动中,去执行test肯定会失败。
maven test
配置 cucumber report
测试报告查看
通过上面的设置,就可以实现,使用Jenkins部署项目时,会首先对应用项目打包–部署–启动。当应用项目构建完成时,会构建cucumber项目,执行test命令,从而实现自动化测试。