接口初心者心得第二版
好吧,持续做了几天,我继续来做分享了,也希望各位前辈多多指教。我表示我还不是很懂。
目前使用的testng和rest-assured。这几天增加了DataProvider和rest-assured的方法。
testng这里是支持新建数据驱动的xml,比如:
<?xml version="1.0" encoding="UTF-8"?>
<data>
<testmethod1>
<abc>123</abc>
<def>456</def>
</testmethod1>
接着可以通过在类中定义DataProvider来实现xml的解析实现,假设dataprovider对应的方法在A类。
@DataProvider
public static Object[][] providerMethod(Method method) {
...
}
在接下来的要使用到数据的时候就可以直接去添加dataprovider对应的的标签,同时testng会根据test method的方法名去找xml中对应的数据,如:
@Test(dataProvider = "providerMethod", dataProviderClass = A.class)
public void testmethod1(Map<?, ?> param) throws InterruptedException {
...
}
这样就可以直接一对多的进行数据驱动了。
这里我有个问题,一般非testng.xml的准备数据的xml里面,很多数据都是不同类型的,但现在我这边读取出来都是String,这个数据类型的设置在xml里面能够直接设置么?或者还有什么好的方式?欢迎大家来告诉我哈
接着再来看下rest-assured吧,Google了相关信息,相比其它框架少了不少。我就用下来的情况说下心得吧。rest-assured也是结合了BDD风格的一个框架。通过given,when,then的结合更方便的进行了API的验证。虽然我个人还是不是很习惯这个语法。我们来看几个例子。
比如这样的Json:
{
"lotto":{
"lottoId":5,
"winning-numbers":[2,45,34,23,7,5,3],
"winners":[{
"winnerId":23,
"numbers":[2,45,34,23,3,5]
},{
"winnerId":54,
"numbers":[52,3,12,11,18,22]
}]
}
}
那么我们的验证就可以这样写:
expect().
body("lotto.lottoId", equalTo(5)).
body("lotto.winners.winnderId", hasItems(23, 54)).
when().
get("/lotto");
当然我们其实在使用mvn跑的时候我们希望能够看到更多的req,res的日志的话我们可以这样增加,这就是rest-assured style了。
expect().
log().all().
body("lotto.lottoId", equalTo(5)).
body("lotto.winners.winnderId", hasItems(23, 54)).
when().
get("/lotto");
我们也可以看一个比较复杂点的语句吧。
given().log().all().contentType("application/json")
.header("cookie",
"abcdefghijkl")
.request().body(jsonbody).expect().statusCode(200).body("result", equalTo(true)).when()
.post("/xxxxx");
所以其实一条语句中将请求,返回,断言,包括url_param等都包括在内了。看个人喜好了。不过从rest assured框架的支持上来讲,断言支持的类型很多,有兴趣的也可以试试看。我目前先按照这个架构往下尝试了,大家可以继续等我的心得。