接口测试笔记

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();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查找sql中涉及的表名称

import pandas as pd import datetime todaystr(datetime.date.today())filepath/Users/kangyongqing/Documents/kangyq/202303/分析模版/sql表引用提取/ file101试听课明细.txt newfilefile1.title().split(.)[0]with open(filepathfile1,r) as file:contentfile.read().lower…

如何在Ubuntu上构建编译LLVM和ISPC,以及Ubuntu上ISPC的使用方法

之前一直在 Mac 上使用 ISPC,奈何核心/线程太少了。最近想在 Ubuntu 上搞搞,但是 snap 安装的 ISPC不知道为什么只能单核,很奇怪,就想着编译一下,需要 Clang 和 LLVM。但是 Ubuntu 很搞,他的很多软件版本是…

【Spring IOC/AOP】

IOC 参考: Spring基础 - Spring核心之控制反转(IOC) | Java 全栈知识体系 (pdai.tech) 概述: Ioc 即 Inverse of Control (控制反转),是一种设计思想,就是将原本在程序中手动创建对象的控制权&#xff…

电感与电容的具体应用

文章目录 一、电感应用1.​电源滤波:2. 储能——平滑“电流波浪”​ ​3. 调谐——校准“频率乐器”​4. 限流——防止“洪水灾害”​二、电容应用1.核心特性理解2.应用场景 三.电容电感对比 一、电感应用 1.​电源滤波: ​场景:工业设备中…

前端面试:axios 请求的底层依赖是什么?

在前端开发中,Axios 是一个流行的 JavaScript 库,用于发送 HTTP 请求。它简化了与 RESTful APIs 的交互,并提供了许多便利的方法与配置选项。要理解 Axios 的底层依赖,需要从以下几个方面进行分析: 1. Axios 基于 XML…

springboot 3 集成Redisson

maven 依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.12</version></parent><dependencies><dependency><groupId>org.red…

C#中继承的核心定义‌

1. 继承的核心定义‌ ‌继承‌ 是面向对象编程&#xff08;OOP&#xff09;的核心特性之一&#xff0c;允许一个类&#xff08;称为‌子类/派生类‌&#xff09;基于另一个类&#xff08;称为‌父类/基类‌&#xff09;构建&#xff0c;自动获得父类的成员&#xff08;字段、属…

Deep research深度研究:ChatGPT/ Gemini/ Perplexity/ Grok哪家最强?(实测对比分析)

目前推出深度研究和深度检索的AI大模型有四家&#xff1a; OpenAI和Gemini 的deep research&#xff0c;以及Perplexity 和Grok的deep search&#xff0c;都能生成带参考文献引用的主题报告。 致力于“几分钟之内生成一份完整的主题调研报告&#xff0c;解决人力几小时甚至几天…

Android SharedPreference 详解

前提&#xff1a;基于 Android API 30 1. 认识 SharedPreference SharedPreference 是 Android 提供的轻量级的&#xff0c;线程安全的数据存储机制&#xff0c;使用 key-value 键值对的方式将数据存储在 xml 文件中&#xff0c;存储路径为 /data/data/yourPackageName/share…

自动化测试脚本语言选择

测试人员在选择自动化测试脚本语言时面临多种选项。Python、Java、C#、JavaScript 和 Ruby 都是常见选择&#xff0c;但哪种语言最适合&#xff1f;本文将详细分析这些语言的特点、适用场景和优劣势&#xff0c;结合行业趋势和社会现象&#xff0c;为测试人员提供全面指导。 选…

【Java项目】基于JSP的KTV点歌系统

【Java项目】基于JSP的KTV点歌系统 技术简介&#xff1a;采用JSP技术、B/S结构、MYSQL数据库等实现。 系统简介&#xff1a;KTV点歌系统的主要使用者分为管理员和用户&#xff0c;实现功能包括管理员&#xff1a;个人中心、用户管理、歌曲库管理、歌曲类型管理、点歌信息管理&a…

element-plus文档解析之Layout布局(el-row,el-col)

前言 这是element-plus提供的响应式布局组件。可以非常方便的实现响应式布局以及快速按比例分块。 例如实现下面的效果&#xff1a; 第一行&#xff1a;宽度占100% 第二行&#xff1a;宽度1&#xff1a;1 第三行&#xff1a;1&#xff1a;1&#xff1a;1 第四行&#xff1a;1…

【Java】——数据类型和变量

个人主页&#xff1a;User_芊芊君子 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录&#xff1a; 1.Java中的注释1.1.基本规则1.2.注释规范 2.标识符3.关键字4.字面常量5.数据类型6.变量6.1变量的概念6.2语法6.3整型变量6.3.1整型变量6.3.2长整…

串口数据记录仪DIY,体积小,全开源

作用 产品到客户现场出现异常情况&#xff0c;这个时候就需要一个日志记录仪、黑匣子&#xff0c;可以记录产品的工作情况&#xff0c;当出现异常时&#xff0c;可以搜集到上下文的数据&#xff0c;从而判断问题原因。 之前从网上买过&#xff0c;但是出现过丢数据的情况耽误…

JVM中是如何定位一个对象的

在 Java 中&#xff0c;对象定位指的是如何通过引用&#xff08;Reference&#xff09;在堆内存中找到对象实例及其元数据&#xff08;如类型信息&#xff09;。JVM 主要通过 直接指针访问 和 句柄访问 两种方式实现&#xff0c;各有其优缺点和应用场景&#xff1a; 一、直接指…

Mac 如何在idea集成SVN

在windows系统上面有我们最为熟悉的小乌龟TortoiseSVN&#xff0c;在mac系统上面则没有什么好用的svn的工具&#xff0c;而且大部分都付费&#xff0c;需要各种渠道找PJ版&#xff0c;费事费力&#xff0c;作为程序员&#xff0c;大部分人应该都会安装开发工具&#xff0c;本文…

批量测试IP和域名联通性

最近需要测试IP和域名的联通性&#xff0c;因数量很多&#xff0c;单个ping占用时间较长。考虑使用Python和Bat解决。考虑到依托的环境&#xff0c;Bat可以在Windows直接运行。所以直接Bat处理。 方法1 echo off for /f %%i in (E:\封禁IP\ipall.txt) do (ping %%i -n 1 &…

LabVIEW变频器谐波分析系统

随着工业自动化的发展&#xff0c;变频器在电力、机械等领域的应用日益广泛&#xff0c;但谐波问题直接影响系统效率与稳定性。传统谐波检测设备&#xff08;如Norma5000&#xff09;精度虽高&#xff0c;但价格昂贵且操作复杂&#xff0c;难以适应现场快速检测需求。本项目基于…

Unity Shader学习总结

1.帧缓冲区和颜色缓冲区区别 用于存储每帧每个像素颜色信息的缓冲区 帧缓冲区包括&#xff1a;颜色缓冲区 深度缓冲区 模板缓冲区 自定义缓冲区 2.ImageEffectShader是什么 后处理用的shader模版 3.computerShader 独立于渲染管线之外&#xff0c;在显卡上运行&#xff0c;大量…

OpenPLC WebServer启动

简述 OpenPLC OpenPLC 可运行在嵌入式系统和普通计算机上&#xff0c;其基本原理是在硬件上安装类似 Linux 的操作系统&#xff0c;并在该环境下运行 OpenPLC 应用程序&#xff0c;从而让用户开发、调试和运行工业自动化控制逻辑。它目前只支持部分 ARM 架构的嵌入式系统&…