接口自动化(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 ...
随机推荐
- Access 时间查询 与 SQL SERVER 不一样的几个地方
最近用到了ACCESS 数据库 ,与之前用SQL SERVER 还是有点区别的. 1. 时间 之间 用 # 连接 如下: public static string GetUserInfo(stri ...
- GIS空间分析和建模复习重点2
10.缓冲区和缓冲区分析的概念 (1)缓冲区分析分为 点缓冲区分析:一般是围绕点对象建立一定半径的圆形区域. 线缓冲区分析:沿着线的两侧建立距离为缓冲距的带状区域. 面缓冲区分析:是沿着多边形的边界建 ...
- ElasticSearch入门学习笔记
ElasticSearch入门笔记 分页查询 from: 开始位置 size: 查多少条 GET /credit_enterprise_info/_search { "query" ...
- jmeter安装配置
#前提需要有java的环境变量JAVA_HOME=/usr/local/java#jmeter变量CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/t ...
- QString的一些使用技巧
简介 QString 字符串被每个GUI程序所使用,不仅是用户界面,还有数据结构. C++原生提供两种字符串: 传统的C风格以'\0'结尾的字符数组和std::string类.与这些不同,QStrin ...
- ROS创建工作空间 Create your workspace
https://blog.csdn.net/baidu_38869387/article/details/119840120 http://wiki.ros.org/catkin/Tutorials/ ...
- vue-cli2.0 项目前端不能用IP局域网访问,只能localhost访问
解决办法1.config/index.js 修改 host:'localhost'为'0.0.0.0' 解决办法2.package.json 修改启动配置 -- host 0.0.0.0 优化终端 ...
- win10+py38环境分分钟装好geopandas
python版本是anaconda自带3.8,尝试了下面这个网上最推荐的安装方法 conda install --channel conda-forge geopandas 但多次以失败告终,看了几个 ...
- vue-购物车的部分
定义一个局部组件 分成三个部分 Vue.component('my-cart',{ template: ` <div class='cart'> <cart-title>< ...
- 解决每次centos7执行java --version git --version等命令时都要重新source /etc/profile后才能执行,否则找不到命令-转载
linux mint 我们通常将环境变量设置在/etc/profile这个文件中,这个文件是全局的. /etc/profile:在登录时,操作系 统定制用户环境时使用的第一个文件 ,此文件为系统的 ...