当前位置: 主页 > JAVA语言

java接口自动化测试框架-java自动生成代码框架

发布时间:2023-02-09 16:19   浏览次数:次   作者:佚名

一、背景

现在,越来越多的 Web 应用程序正在转向 RESTful 架构。 许多产品和应用程序通常以一组 REST API 的形式提供给用户。 这样的好处是用户可以根据自己的需要调用不同的API,集成自己的应用。 出来。

Rest-Assured是一套Java实现的REST API测试框架。 轻量级REST API客户端,可直接编写代码向服务器发起HTTP请求java接口自动化测试框架,并验证返回结果; 它的语法非常简洁。 专为测试 REST API 而设计的 DSL。 接口测试以行为驱动的方式进行,让不懂代码的人也能轻松上手,理解并编写一些测试脚本。

2. Rest-Assured框架搭建步骤 2.1 创建maven项目

tp框架调用接口_java自动生成代码框架_java接口自动化测试框架

java自动生成代码框架_tp框架调用接口_java接口自动化测试框架

java自动生成代码框架_tp框架调用接口_java接口自动化测试框架

2.2 配置maven相关依赖


io.rest-assured
rest-assured
4.4.0


io.rest-assured
json-schema-validator
4.4.0


io.rest-assured
json-path
4.4.0

其中json-schema-validator是接口请求结果通过schema断言所需要的依赖包


junit
junit
4.13.2
test

tp框架调用接口_java自动生成代码框架_java接口自动化测试框架

org.testng testng 7.4.0 compile

3. 接口测试用例 3.1 一个简单的接口测试用例

public static Headers US_QA_SIT_header(){
String access_token = Token.UsqaSitSubAdminToken();
Header header1 = new Header("Authorization","Bearer " + access_token);
Header header2 = new Header("Content-Type", "application/json");
Header header3 = new Header("x-subscription","xxxxxxxxxx");
Header header4 = new Header("x-tenant","xxx");
Headers headers = new Headers(header1,header2,header3,header4);
return headers;
}
@Test
public void test01GetApps(){
ValidatableResponse response = given().
headers(HeaderTest.US_QA_SIT_header()).
when().get(base_url).
then().statusCode(200);
}

上面的例子是获取APP列表,获取带有header信息的request,断言statuscode是否等于200,不做进一步断言。

java自动生成代码框架_tp框架调用接口_java接口自动化测试框架

3.2 参数信息 3.2.1 Cookie信息 在普通模式下,可以通过以下方法指定一个cookie或多个cookie:

given().cookie("cookie_name","value").when().get("/cookie").then().assertThat();
given().cookie("cookie_name","value1","value2");//这样创建两个cookie,cookie_name=value1和cookie_name=value2
Cookie cookie1 = Cookie.Builder("cookie1","value1").build();
Cookie cookie2 = Cookie.Builder("cookie2","value2").build();
Cookie cookies = new Cookies(cookie1,cookie2);

3.2.2 header信息和cookie信息一样,可以单独指定,一个header名称对应多个value,可以同时指定多个header:

given().header("header1","value1").when().get("/list").then();
given().header("header","value1","value2").when().get("/list").then();
given().header("header1","value1").header("header2","value2").when().get("/list").then();
Header header1 = new Header("header1","value1 ");
Header header2 = new Header("header2", "value2");
Headers headers = new Headers(header1,header2);

3.2.3 content-type信息content-type信息可以放在header中或者使用contentType方法:

given().header("Content-Type", "application/json").when().get("/list").then();
given().contentType().when("application/json").get("/list").then();

如果接口需要上传文件,内容类型应该是multipart/form-data。

3.2.4 请求参数化 通常情况下,可以直接使用body来完成请求,完整的请求参数,参数化可以通过param来请求:

given().body("{\"username\":\"wy\",\"password\":\"123456\"}").when().post("/login").then;
given().param("username","wy").param("password","123456").when().post("/login").then;

rest-assured会根据http请求类型自动判断参数是查询参数还是表单参数。 如果一个请求包含两个参数,可以这样使用

given().formParam("username","wy").queryParam("list").when().post(url).then();

如果参数是上传的文件,需要使用multi-part方式传递:

@Test(timeOut = 300000)
public void test03UploadApp(){
File filedir = new File("");
String filePath = null;
try {
filePath = filedir.getCanonicalPath();
} catch (IOException e) {

java接口自动化测试框架_tp框架调用接口_java自动生成代码框架

e.printStackTrace(); } String file_dir = filePath + "\\src\\test\\resources\\package\\Youku_V8.6.8.200420.0001_ab235fdcb823d83f.apk"; ValidatableResponse response = given(). headers(HeaderTest.US_QA_SIT_header_multipart()). header("x-file-content-length", 103616863). multiPart(new File(file_dir)). when().post(base_url +youku_id +"/upload"). then().statusCode(200); }

可以使用 var-args 或列表指定多值参数:

given().param("param","value1","value2").when().post(url).then();
List values = new ArrayList();
values.add("value1");
values.add("value2");
given().param("param",values).when().post(url).then();

可以在选择时指定路径参数,或使用路径参数:

given().when().post("/{location1)/{location2}","country","city").then();
given().pathParam("location1","country").pathParam("location2","city").when().get(url).then();

当从一个接口请求获取数据作为下一个接口的入参时,可以直接根据返回值json路径请求接口获取:

String param = get("/name").then().body("path1.path2")

3.3 断言 3.3.1 响应主体断言

断言在body中返回某个值,可以通过jsonPath路径找到要断言的参数java接口自动化测试框架,然后根据需要的断言类型进行判断:

@Test
public void test10GetFilePath(){
ValidatableResponse response = given().
headers(HeaderTest.US_QA_SIT_AR_header()).
when().get(base_url).
then().body("path1.path2",equals("value")).
body("path1.path2",hasItem("value")).

java接口自动化测试框架_tp框架调用接口_java自动生成代码框架

body("path1.path2",hasXpath("value")) }

如果想对整个请求体做一个完整的断言,可以导入json schema验证包,配置请求返回体的json schema文件对整个请求体进行断言;

架构样式:

{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Product set",
"type": "array",
"items": {
"title": "Product",
"type": "object",
"properties": {
"id": {
"description": "The unique identifier for a product",
"type": "number"
},
"name": {
"type": "string"
},
"price": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": true
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"uniqueItems": true
},
"dimensions": {
"type": "object",

java接口自动化测试框架_tp框架调用接口_java自动生成代码框架

"properties": { "length": { "type": "number" }, "width": { "type": "number" }, "height": { "type": "number" } }, "required": ["length", "width", "height"] }, "warehouseLocation": { "description": "Coordinates of the warehouse with the product", "$ref": "http://json-schema.org/geo" } }, "required": ["id", "name", "price"] } }

3.3.2 状态码断言

given().body("body").when().get(url).then().statusCode(200);
given().body("body").when().get(url).then().assertThat().statusLine("message");
given().body("body").when().get(url).then().assertThat().statusLine(containString("message"));

3.3.3 header断言

given().body("body").when().get(url).then().header("header","value");
given().body("body").when().get(url).then().headers("header1","value1", "header2","value2"...);
given().body("body").when().get(url).then().headers("header1","value1", "header2",containString("value2")...);

总结

以上介绍了rest-assured的工程搭建和一些基本使用,通过具体的例子说明了如何传递参数、请求、断言,满足了接口测试的基本需求。 它还提供许多功能,例如日志记录、身份验证、重定向和解码。 感兴趣的同学可以继续探索。

最后,我要感谢所有仔细阅读我文章的人。 互惠总是必要的。 虽然不是很值钱的东西,但是需要的时候可以带走:

tp框架调用接口_java自动生成代码框架_java接口自动化测试框架

这些资料应该是给【软件测试】的小伙伴们最全最全的准备库了。 这个仓库也陪伴了数以万计的测试工程师走过最艰难的旅程。 我希望它也能帮助你!

java自动生成代码框架_tp框架调用接口_java接口自动化测试框架