接口测试笔记

ops/2025/3/14 7:37:10/

4、接口测试自动化

接口自动化概述


HttpClient

HttpClient开发过程

创建Java工程
新建libs库目录
HttpClient 工具下载及引入

  • https://hc.apache.org/index.html
  • 工程中引入jar包

Get请求

HttpGet方法---发起Get请求

创建HttpClient对象

  •     CloseableHttpClient httpclient = HttpClients.createDefault();

创建带请求地址的HttpGet对象

  • HttpGet httpGet = new HttpGet("http://xxxxxx");
  • //ClassicHttpRequest get = ClassicRequestBuilder.get(url).build();

执行HttpGet请求,获得响应

  • client.execute(get, response -> {})

获取响应实体

  • HttpEntity entity = response.getEntity();

获取响应内容

  • EntityUtils.toString(entity);

断开连接

  • response.close();
  • httpclient.close();

请求Header类型:Content-Type=application/json

skulist-1测试用例详解

用例:获取所有商品的sku列表成功

skulist-2测试用例详解

用例:获取goodsId=1的商品sku信息成功

skulist-3测试用例详解

用例:获取goodsId=2147483648的商品sku信息失败

HttpGet用法总结

注意事项:

  • 请求地址中有多个参数用&符号连接,例如http://aaaaa?id=1&name=tom
  • 请求参数如包含非英文字符,需要encode转码

例如:

  • URLEncoder.encode("{\"pId\":\"123456\"}", "UTF-8");
  • String url3 = "http://localhost:8899/common/getTransportFee?id=1&addressDetail=";
  • String ulr3Param = URLEncoder.encode("浙江省_杭州市_滨江区", "UTF-8");

POST

HTTP请求格式-POST方法

请求(Request)

请求行

POST /xinhu/index.php?a=check&m=login

HTTP/1.1

请求头

Accepttext/html,application/xhtml+xml

Accept-Encoding: gzip, deflate

Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

Connection:keep-alive

Hostlocalhost:8032

请求正文

adminuser=YWRtaW4%3A&=123456&rempass=0&button=&jmpass=false&device=1517376146707&adminpass=MTIzNDU2

响应(Response)

状态行

HTTP1.1 200 OK

响应头

ConnectionKeep-Alive

Content-Encodinggzip

Content-Length1234

Content-Typetext/html;charset=utf-8

DateMon, 05 Feb 2018 02:43:40 GMT

响应正文

{"success":true,"face":"http:\/\/localhost:8032\/xinhu\/upload\/face\/1.jpg"}                                                                                                                                                  

创建HttpClient对象

  •     CloseableHttpClient  httpclient = HttpClients.createDefault();

创建带请求地址的HttpPost 对象

  •         HttpPost httpPost = new HttpPost("https://www.xxx.com");

设置HttpPost对象Header属性    

  •      httpPost.setHeader("Content-Type","application/json");

设置HttpPost 参数

  •     StringEntity entity = new StringEntity("para","utf-8");
  •     httpPost.setEntity(entity);

执行HttpPost请求,获取post请求的响应

  •      httpclient.execute(httpPost,resp ->{});

获取响应实体

  •     HttpEntity entity = response.getEntity();

获取响应内容

  •     EntityUtils.toString(entity);

断开连接

  •     response.close();
  •     httpclient.close();

请求Header类型:Content-Type=application/json

login-1测试用例详解

响应结果
{"message":"success","code":200}

HttpClient登录模拟总结

注意事项:

  • 根据具体登录请求选择HttpEntity具体类型(HttpEntity   的两个实现类: StringEntity和 UrlEncodedFormEntity)
  • 登录请求的Content-Type需要正确设置
  • 如果不想使用同一个HttpClient对象传递登录信息,可以考虑对需要登录信息请求分别设置Cookie:

httpPost.setHeader("Cookie"," mindsparktb_232530392=true; mindsparktbsupport_232530392=true");

HttpClient设置代理
  • HttpHost proxy = new HttpHost("127.0.0.1", 8888);
  • CloseableHttpClient client = HttpClients.custom().setProxy(proxy).build();

引入测试框架

测试框架:TestNG

测试验证点、用例集的组织、测试报告

TestNG简介
  • The next generation of unit testing
  • Cedric Beust
  • http://testng.org/doc/
  • 基于Junit、Nunit并支持注解、数据驱动、多线程执行等特性的Java测试框架

TestNG基础:注解(Annotation)

JDK5引入注解,TestNG用以方便的标注测试方法和组件

  • @Test 标注测试方法
  • @BeforeTest 标注全部测试方法执行前需要执行的方法
  • @AfterClass 标注测试类全部方法执行之后需执行的方法
  • @DataProvider 数据驱动

注意:TestNG执行测试方法之前,都会重新实例化测试类

TestNG基础:断言(Assert)

org.testng.Assert

  • fail 直接失败测试用例
  • assertTrue    判断是否为true
  • assertNull    判断是否为null
  • assertEquals    判断是否相等

TestNG基础:Test属性使用

TestNG基础:@DataProvider

TestNG基础:DataProvider属性使用
  • 使用数据驱动,复用测试方法

TestNG基础:testng.xml用例集
  • 指定测试类

TestNG自带测试报告

TestNG+ReportNG报告

Allure--自动化测试报告生成

TestNG+FreeMarker测试报告


接口测试结果验证

如何验证

Java中解析常用的类库有FastJson、JSON-Java、Gson等

解析JSON数据

  • fastjson2-2.0.39.jar

验证JSON数据正确

  • TestNG、Assert

解析JSON


面向场景的接口自动化测试

用例回顾

用例步骤--登录成功

用例步骤-查询收货地址

用例步骤-计算运费

用例步骤-提交订单

场景测试总结

注意事项:

  • 使用TestNG的BeforeClass和AfterClass去初始化和关闭HttpClient对象
  • 使用dependsOnMethods属性关联场景的接口

注意事项:

  • 根据具体场景分析关联的接口,使用TestNG功能来安排用例执行顺序
  • 使用成员变量来传递接口返回数据
  • 在不同的HttpClient中间显示传递Cookie

返回Cookie

CookieStore cookie =new BasicCookieStore();
httpClient =HttpClients.custom().
setDefaultCookieStore(cookie).build();

设置Cookie

httpClient =HttpClients.custom().
setDefaultCookieStore(cookie).build();

文章来源:https://blog.csdn.net/weixin_74301566/article/details/146175334
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/ops/165607.html

相关文章

mysql select distinct 和 group by 哪个效率高

在有索引的情况下,SELECT DISTINCT和GROUP BY的效率相同;在没有索引的情况下,SELECT DISTINCT的效率高于GROUP BY‌。这是因为SELECT DISTINCT和GROUP BY都会进行分组操作,但GROUP BY可能会进行排序,触发filesort&…

Python之变量及简单的数据类型

本文来源于《Python从入门到实践》,自己整理以供工作参考 基本内容 print("Hello Python World!")message "Hello Python world!" print(message)message "Helllo Python Crash Course world!" print(message)name "ada lov…

Vue组件通信

Vue组件通信 Vue组件放在components目录&#xff1a; 1、组件是对于HTML标签的扩展 2、以.vue结尾的文件都是叫做组件 APP.vue叫做根组件 TODO: 组件的文件名字的首字母大写 组件的引入 import Xxx from ./components/Xxx.vue App.vue: <script> import Swiper1 …

Linux 》》Ubuntu 18 LTS 之后的版本 修改IP地址 主机名

进入目录 /etc/netplan 修改 50-cloud-init.yaml 》保存文件后&#xff0c;执行以下命令应用更改&#xff1a; sudo netplan apply 》》 DHCP模式 修改主机名 hostnamectl set-hostname xxxx 修改cloud.cfg 防止重启主机名还原 但测试下来 不修改&#xff0c; 重启 也不会还…

JAVA中的多线程安全问题及解决方案

一.线程安全的定义 线程安全是指在多线程环境下&#xff0c;对共享资源进行并发访问时&#xff0c;程序能够正确地处理&#xff0c;不会出现数据不一致、逻辑错误等问题&#xff0c;确保程序的执行结果与单线程环境下的执行结果相同&#xff0c;或者符合预期的并发逻辑。 有些代…

Node.js 模块化概念详细介绍

目录 模块化的概念 模块化的好处&#xff1a; 实现模块化 代码实现 1. 创建计算器模块 2. 使用计算器模块 3. 运行结果 总结 常见的Node.js核心模块 模块化的应用场景 Node.js 采用了模块化的设计&#xff0c;使得开发者能够将代码拆分成多个独立的模块&#xff0c;便…

利用java实现数据分析

1 问题 在日常生活中&#xff0c;对于数据的处理&#xff0c;为了使数据更加直观&#xff0c;我们可以使用柱状图&#xff0c;饼图&#xff0c;折线图等来呈现&#xff0c;同时也可以对数据直接进行一些处理&#xff0c;那怎样用java来处理这类问题呢&#xff1f; 2 方法 代码清…

机器视觉工程师红外相机的选择:红外长波工业相机和短波红外工业相机玄机大总结

红外长波(LWIR)和短波(SWIR)工业相机在原理、应用场景和技术特点上有显著差异。以下是它们的对比分析: 1. 波长范围与成像原理 2. 技术特点 3. 典型应用场景 4. 优缺点对比 LWIR优势: 无需光照,适用于完全黑暗环境。 直接反映物体温度分布。 对烟雾、灰尘穿透能力强。…