接口自动化(TestNG)
数据驱动概念: 用户输入输出数据来判断测试用例是否通过从而验证需求的测试.
一、接口自动化框架搭建(TestNG数据驱动) ---parameter
关键代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="TestNG" verbose="1">
<parameter name="loginPhone" value="xxx"></parameter>
<parameter name="isMobile" value= "false"></parameter>
<test name="apiTest">
<classes>
<class name="com.demo.Body" />
</classes>
</test>
</suite>
@Test
@Parameters({"loginPhone", "isMobile"})
public static void postLogin(String loginPhone, String isMobile) {

二、data provider 自定义二位对象数组
注意事项: 1、定义DataProvider name, 如果没有定义name属性则匹配二维数组名
2、test annotation 要指定dataProvider name和步骤1 的name值相同
3、数组数据类型要和测试方法参数类型匹配。
官网模板:
//https://testng.org/doc/documentation-main.html
//This method will provide data to any test method that declares that its Data Provider
//is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
{ "Cedric", new Integer(36) },
{ "Anne", new Integer(37)},
};
} //This test method declares that its data should be supplied by the Data Provider
//named "test1"
@Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
System.out.println(n1 + " " + n2);
}
关键代码方法一:
package ddt; import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; import io.restassured.RestAssured;
import io.restassured.response.Response; public class DataProTest { @DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
{ "loginPhone", "xxxx" },
{ "isMobile", "false" },
};
} @Test(dataProvider = "test1")
public static void postLogin(String loginPhone, String isMobile) {
RestAssured.baseURI = "https://ipassport.damai.cn/newlogin/account/check.do";
RestAssured.basePath = "";
@SuppressWarnings("deprecation"

方法二、
package ddt; import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; import io.restassured.RestAssured;
import io.restassured.response.Response; public class DataProTest { @DataProvider
public Object[][] createData1() {
return new Object[][] {
{ "loginPhone", "xxxx" },
{ "isMobile", "false" },
};
} @Test(dataProvider = "createData1")
public static void postLogin(String loginPhone, String isMobile) {
四、响应解析-响应状态码、响应头域,响应Cookie
关键代码:
System.out.println("响应状态码:" + String.valueOf(responseCode));
String responseHearder = response.getHeader("token");
System.out.println("响应头域:" + String.valueOf(responseHearder));
String responseCookie = response.getCookie("JSESSIONID");
System.out.println("响应Cookie值:" + String.valueOf(responseCookie));
String responseContent = response.getBody().print();
响应解析Body
//方法一
JsonPath getJsonValue = response.jsonPath();
String nameValue = getJsonValue.get("name");
System.out.println("namevalue: " + nameValue);
//方法二
JsonPath getResponseValue = response.jsonPath();
String value = getResponseValue.get("$.data.file[1].version");
五、请求封装
封装类:
package com.tools; import io.restassured.RestAssured;
import io.restassured.response.Response; public class ApiTool { public static String getWebCookie() {
RestAssured.baseURI = "https://www.douyin.com";
RestAssured.basePath = "/web/api/v2/platform/user/?id=1561475827829";
Response response = RestAssured
.given()
.header("accept",
"application/json, text/plain, */*",
"user-agent",
"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36")
.param("id", "1561475827829").when().log().all().get();
String responseContent = response.getBody().print();
System.out.println(responseContent);
String Cookie = response.getCookie("JSESSIONID");
return Cookie;
} public static Response webGet(String url) {
String cookie = ApiTool.getWebCookie();
Response response = RestAssured.given().cookie("JSESSIONID", cookie)
.when().log().all().post(url);
return response;
} }
实现类
import io.restassured.response.Response;
import org.testng.annotations.Test;
import com.tools.ApiTool;
public class GetHomePageInfo {
@Test
public void getWebHomepage() {
Response response = ApiTool.webGet("www.baidu");
response.getBody().print();
}
}
六、断言
Assert
七、用例管理
从class, method ,group 三个维度,依托功能测试设计按模板、功能点,用例优先级
用例分类运行基础是:解耦
测试一个api的增删改查
如果不解耦,新增失败,会导致后续的删改查用例全部失败
class维度:
method维度:
group维度
接口自动化(TestNG)的更多相关文章
- 接口自动化:HttpClient + TestNG + Java(一) - 接口测试概述+自动化环境搭建
1.1 接口测试简介 1.1.1 什么是接口测试 开始学习接口自动化测试之前,我们先要来了解什么是接口,以及什么是接口测试. 我们都知道,测试从级别上划分可以分为 组件测试 集成测试 系统测试 验收测 ...
- 接口自动化学习--testNG
一个月一更的节奏~ testNg是一个开源的自动化测试框架..具体那些什么特点的就不想打了- -,贴张图(虽然也看不懂): 学习网站:https://www.yiibai.com/testng 一样是 ...
- Java + maven + httpclient + testng + poi实现接口自动化
一.maven中引入httpclient.testng.poi依赖包 <project xmlns="http://maven.apache.org/POM/4.0.0" x ...
- python接口自动化(四)--接口测试工具介绍(详解)
简介 “工欲善其事必先利其器”,通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进行接口测试,能够提供 ...
- 接口自动化思路_JAVA
写在开头: 技术渣做接口自动化,大神们请轻喷!多提提优化方案和问题点. 以前做接口测试一直通过postman 和 soapUI来做,Postman 是Chrome的一个插件Case多了不好管理,同时执 ...
- 接口自动化学习--mock
好久没有写学习的总结,都正月十二了,但还是要来个新年快乐鸭. 一直都在看imooc的一套java接口自动化实战课程,现在看到了尾部了,然后想到之前那些testng,mock,httpclient等都没 ...
- java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)
简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...
- java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮
1.简介 上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具.然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了.关于手动测试 ...
- Python+Pytest+Allure+Git+Jenkins接口自动化框架
Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...
- 基于RestAssured实现接口自动化
RestAssured是一款强大的接口自动化框架, 旨在使用方便的DSL,简化的接口自动化. 下面是基于RestAssured扩展的一个简单框架示例, 先看看用例的风格: package testca ...
随机推荐
- Pytorch实战学习(六):基础CNN
<PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili Basic Convolution Neural Network 1.全连接网络 线性层串行-全连接网络 每一个输入和输 ...
- C语言学习记录(二)
C语言学习记录(二) 一.知识要点(C语言概述) 1.C语言的发展历史和特点 C语言的发展历史 C语言最早在B语言的基础上开发出来,并于1972年在一台计算机上首次实现. C语言最开始只是为描述和实现 ...
- A、创建模式(5种)
设计模式的分类总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式. ...
- SQLSERVER自动备份数据库
1. 通过操作系统的定时任务执行 创建两个文件,auto.bat和auto.sql,使用bat调用sql文件中的代码段 auto.bat内容 sqlcmd -S localhost,2433 -U s ...
- got multiple values for keyword argument 'to_fields'
django.db.models.fields.related.ForeignObject.__init__() got multiple values for keyword argument 't ...
- 【Selenium IDE】下载安装Chrome和Firefox插件IDE ide了解就行 不是重点 重点是写脚本
下载安装Chrome和Firefox插件IDE 1.Chrome的IDE安装(1)由于chrome的限制所以提供了一个小方法:链接: https://www.crx4chrome.com/crx/77 ...
- sql 时间
sql拿两天之内的时间 SELECT * FROM room_message WHERE send_date BETWEEN UNIX_TIMESTAMP( now())-172800 AND now ...
- select remove option safari 兼容
select 移除某一 option 的 javascript 公司用的代码是 var ddlPrimaryResource = document.getElementById(ddlPrimaryR ...
- java的Stream
代码 List<Student> all = Student.getAll(); // 转换成数组 过滤所有的男性 Student[] students = all.stream().fi ...
- ssh_remote_without_password
2 machines, 1 called client , 1 called server , server need static ip address. client connects serve ...