| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
一个用例对应多个接口 一个接口可以对应多个数据 一个数据只能对应一个接口
注:如果不进行通用头部等rest-assured过滤器与通用BaseUrl设置,可直接注入com.ly.api.DefaultApiClient类进行接口调用
eg.
@HttpServer(baseUrl = "${driver-api.url}")
@Filters({RestAssuredLogFilter.class, DriverHeadersFilter.class})
public interface DriverApiClient extends BaseHttpClient{
}name: login
type: json
description: 登录成功
url: /login
method: POST
headers:
x-request-client-imei: "222222222222"
requests:
{
"phone": "${phone, 13000000001}",
"code": "0000"
}
setup:
- method: createTimestamp
- method: setUptest
args: ${request}
teardown:
- method: teardowm
args: args1111, args222
- method: teardowm1
args: ${response}, ${timestamp}
onFailure:
- method: onFailure
args: args1111, args222
validate:
eq: ["result": 0, "error_code": "0"]
notNull: ["data.token"]
plugin:
- method: "teardowm"
args: args1111, ${orderId}
saveGlobal: ["orderId": "response.data.orderId"]
saveMethod: ["orderId": "response.data.orderId"]
saveClass: ["orderId": "response.data.orderId"]
saveThread: ["orderId": "response.data.orderId"]
parameters:
- name: login-phone-unregistered
description: 手机号未注册
headers:
requests:
"phone": "13000000009"
"code": "0000"
validate:
eq: ["result": 1]
- name: login-phone-not-found
description: 手机号不存在
requests:
"phone": "10000000000"
"code": "0000"
validate:
eq: ["result": 1]
- name: login-code-length-error
description: 验证码长度错误
requests:
"phone": "10000000000"
"code": "000"
validate:
eq: ["result": 1]
- name: login-code-error
description: 验证码错误
requests:
code: "0001"
validate:
eq: ["result": 1]
name:为该数据唯一标识,用例中引入需要
type:标识该接口请求方式,目前支持(form,json,xml)
description:简介,标明该数据作用
url:接口url,可以是一个带http/https的全的url,也可是baseUrl + url
method:http请求方法
headers:接口头部,非必填 如果有默认固定头部可继承com.ly.core.listener.HeadersFilterAdapter,重写defHeaders()方法进行设置默认固定头部,如果与yaml文件中headers重复,优先headers中参数,两个地方都可用${}通配符调用
requests接口请求数据,非必填
setup, teardown: 接口请求前后的两个hook函数,setup在接口执行前会执行,teardown在接口执行后且各种断言执行完后执行, 支持${}参数
validate断言非必填 断言方法内key为固定,比如eq,notNull,isNull,plugin等,value为一个数组,支持jsonpath取接口返回值与支持通配符${}取前面接口缓存,其中plugin为插件式断言,里面为com.ly.plugin.PluginSupport类中的一个方法,用法如hook函数
onFailure接口失败调用 如果接口调用失败或者validate校验不过会调用onFailure中的方法,用于进行一些有状态的数据回滚
saveGlobal保存一个作用域在整个测试生命周期的值
saveMethod保存一个作用域在该测试方法的值(多线程运行时候会进行线程隔离,线程安全)
saveClass保存一个作用域在该测试类的值
saveThread保存一个作用域在该线程的值(用于多线程执行用例时候进行线程隔离)
parameters接口参数化设置,可为空 parameters节点结构为一个list,list里面每一个值相当于一份完整的接口数据 parameters除了定义下的5个节点数据与save节点(saveMethod,saveThread,saveGlobal)外,其他数据全取父case内容,组装成一份完整的case数据,运行模式为SINGLE时候,会把父case与parameters节点下的case都运行一遍 parameters节点下包括:
参数化说明 yaml模板中支持参数化|jsonpath|xpath等写法,如${phone, 13000000001}, 该用法为该参数化值设置一个default值,如果缓存中无该值,那就取default值 jsonpath一般用于validate与saveGlobal中,用于取返回值校验与保存 setup支持${response}参数化,${response}会转换成com.ly.core.parse.BaseModel teardown支持${response}参数化,${response}会转换成com.ly.core.base.Response
定义一个类继承com.ly.core.base.BaseTestCase.class,然后通过spring @Autowired注入编写的接口层的类,再调用接口类中定义的接口,返回一个com.ly.core.base.Response对象
allure测试报告注解:
@Feature("driver-api") 类上注解, 标注主要功能模块, 可以理解为testsuite
@Story("登录模块接口") 类上注解,属于feature之下的结构,可以理解为testcase
@Severity(SeverityLevel.CRITICAL) 标注测试用例的重要级别
@Description("司机基础信息") 用例说明
testng核心驱动注解@Test: @Test(groups = "driver-api")
测试数据引入核心注解@DataModel: eg.
@DataModel(path = {"test-driver-api.yml", "test-ck.yml"}, format = DataModel.Format.MULTIPLE)
eg.
@DataModel(value = {"login1", "login2", "login3"}, format = DataModel.Format.SINGLE)
value: 对应的数据层中的name, 做数据层引入, format = DataModel.Format.MULTIPLE可省略value值, 引入path所有值
format:
请求与响应 com.ly.api.BaseHttpClient对象, 一个用于发起请求http的Client com.ly.core.base.Response对象, 链式调用方法处理接口返回值
eg.
driverApiClient.wait(TimeUnit.SECONDS, 1)
.saveAsk("key", "key")
.doHttp("login")
.auto();
配置方法使用,定义一系列配置方法,不同测试生命周期运行 @ApiBeforeMethod @ApiBeforeClass @ApiBeforeSuite @ApiAfterMethod @ApiAfterClass @ApiAfterSuite 主要结合@DataModel, @DataFile, @DataParams 当配置方法入参使用
application-qa.yml,application-uat.yml 区分环境配置文件,最终会根据使用环境默认合并到application.yml
application.yml
application-qa.yml,application-uat.yml
httpurl节点: 配置接口层接口类上面@HttpServer注解中baseurl代表值baseurl直接用${driverapi.url}调用即可
redis节点: 配置redis
RedisService redisService = SpringContextUtil.getBean(RedisService.class);
mongodb节点: 配置mongodb
MongoTemplate mongoTemplate = SpringContextUtil.getBean(MongoTemplate.class);
datasource节点: 配置多数据源
MysqlServer mysqlServer = MysqlServer.create("carrier");
提供一个测试全程生命周期监听器com.ly.core.listener.BaseLifeCycleListener(不建议使用)
提供一个TestNg全程生命周期接口com.ly.core.support.TestNgLifeCyclePostProcessor(建议使用)
提供一个HTTP请求生命周期接口com.ly.core.support.HttpPostProcessor
提供一个给PostProcessor接口排序的Order接口
可设置测试用例执行失败或发生异常时,在多少个错误后跳过后续的其他测试用例
pom.xml文件中设置
<skipAfterFailureCount>5</skipAfterFailureCount>
可设置通过设置groups运行,但是只能选择groups与 testng.xml其中一种方式运行,需要改pom.xml文件
提供另外两种数据驱动方式 @DataFile与@DataParams
提供com.ly.core.actuator.TestNgRun 编码方式运行
提供har与swagger格式转换为yaml用例数据(charles导出.har文件转换为yaml格式)
com.ly.core.Utils.Source2Yaml
redis
mysql
MongoDB
钉钉,邮件通知
用例失败重试
并发执行
jenkins支持
| Back | FazBrowse Home | New Git URL |