想在java接口自动化里用上Python的requests?这样做就可以了

相信现在很多的公司自动化测试重点都在接口层,因为接口测试更加接近代码底层,相对于UI自动化,接口自动化有着开发更快、覆盖更全、回报率高等优点。
接口自动化代码实现不难,本质上就是代码模拟发送请求,然后判断返回结果是否符合预期即可。目前也有很多成熟开源的可以发送http请求的库,比如python的requests库。requests库易上手,使用起来也非常便捷。比如,我们要测试一个查询用户名的接口。
import pytest
import requests
def test_user_info():
'''查询用户信息'''
r = requests.get(url, headers=HEADER)
result = r.json()
assert result["status"] == 0
assert result["data"]["username"] == "把苹果咬哭"
这样就实现了一个接口的测试,用python(语言)+requests(第三方库)+pytest(测试框架)来搭建一套接口自动化项目其实还是很便捷的。
用java造一个“requests”出来
但是对于想使用java语言来搭建的话,暂时就没有像Python的requests这么便捷的库了。java中也有一些可以模拟发送请求的库,比如httpclient、okhttp等。不过这两个用起来的便捷程度跟requests就差远了。不过我们可以去封装出一个类似于requests使用方式的类,组里大佬提供了主要封装,我也根据自己项目需求进行补充,这里分享一下。
在java里实现需要借助另一个核心类,那就是RestTemplate,是Spring提供的用于访问Rest服务的客户端。具体有兴趣的小伙伴可以自行搜索进行更全面的学习。下面就来demo出一个可以模仿requests发送带请求body的post请求,还要带上header。
首先,我们用requests的时候,通常是这样实现的:
import pytest
import requests
header = {
'Authorization':"我是鉴权"
}
event = {
"id": 1,
"create_user": "把苹果咬哭"
}
def test_event_add():
'''测试添加项目'''
r = requests.post(url, data=event, headers=header)
result = r.json()
assert result["status"] == 0
所以,我们可以知道关键就在于requests.post(url, data=event, headers=header),传入测试接口url,请求body参数,还有header之后发送请求,这样的调用方式。其实只需要将restTempate简单的封装一下即可。
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSONObject;
public class DemoRestUtils {
RestTemplate restTemplate;
//提供一个默认构造方法
public RestSuperUtils() {
restTemplate = new RestTemplate();
}
/**
* POST Body请求方式,带有header 请求Body JSON Body体
*
* @param url
* @param headers
* @param jsonBody
* @return
*/
public JSONObject postForBody(String url, HttpHeaders headers, JSONObject jsonBody) {
HttpEntity<?> httpEntity = new HttpEntity<>(jsonBody, headers);
ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(url, HttpMethod.POST, httpEntity,
JSONObject.class);
JSONObject jsonResponse = responseEntity.getBody();
return jsonResponse;
}
}
这里可以将header跟请求body整合成HttpEntity,这样的话就可以直接调用restTemplate提供的exchange方法,传入接口地址,请求方式,还有请求实体即可完成调用,而且还可以通过ResponseEntity的getBody方法获得返回,再加一卜转化后,返回json格式的请求响应即可。这样我们的用例可以这样写了:
@SpringBootTest
public class TestDemo {
public DemoRestUtils requests;
private final String apiPath = "/addEvent";
void testQueryDemo() {
String reqData = "{\"id\": 1}";
//调用接口
JSONObject reqData = JSON.parseObject(testEvent);
JSONObject response = requests.postForBody(apiPath, reqData);
}
}
最后可以对返回的response做分析,拿到你想要断言的字段,可以使用fastjson的JSONPath.eval方法,可以支持xpath定位到你要的字段,拿到值。
上述只是伪代码,导入依赖如果你使用jetbrain IDea的话会有提示导入,本文目的只是介绍一种思路,并不适合直接复制引用。欢迎交流!
想在java接口自动化里用上Python的requests?这样做就可以了的更多相关文章
- java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮
1.简介 上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具.然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了.关于手动测试 ...
- java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)
简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...
- 【转】JAVA接口自动化测试之一个测试方法对应多条测试数据的实现方式
一.痛点:一条测试数据对应一个测试方法 前面的章节中我们已经写代码实现了登录接口的处理调用,但是一个接口往往是需要多条测试用例才能完整的覆盖到每一种情况. 针对于单接口多条测试用例需要执行的情况,该如 ...
- python接口自动化18-multipart/form-data上传多个附件
前言 reuqests上传一张图片到服务器,前面已经介绍过了,那么如何在提交BUG的时候,上传附件呢? 上传附件的时候,文件的name参数名称是一样的,python里面key是不可以重复的,又如何处理 ...
- python接口自动化 - 断言(上)
我们在做接口自动化的时候会用当unittest框架,这个框架中是有assert方法 当我们写好我们的case后 总要有个验证是否正确的东西,assert就给我们提供了非常强大的结果验证 序号 断言方法 ...
- 【亲测】Java 接口自动化步骤
GET请求(Maven) 一. src/main/java 1.[地址--HOST]创建并设置配置文件(后缀名.properties的文本文件):存放接口请求的host地址 2.[地址]TestBas ...
- java接口自动化(二) - 接口测试的用例设计
1.简介 在这篇文章里,我们来学习一下接口测试用例设计,主要是来学习一些用例设计要点.其实说白了,接口用例设计和功能用例设计差不多,照猫画虎即可.不要把它想象的多么高大上,多么的难,其实一样,以前怎么 ...
- java接口自动化基础知识(二)
二.HttpClient+testNG实现对接口的测试及校验 在上面第一篇中已经实现了基础配置和测试用例数据准备,本篇文章将以登录举例进行测试执行. 这是之前login接口的代码 @Test(grou ...
- Java接口自动化测试之TestNG测试报告ExtentReports的应用(三)
pom.xml导入包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
随机推荐
- UML科普文,一篇文章掌握14种UML图
前言 上一篇文章写了一篇建造者模式,其中有几个UML类图,有的读者反馈看不懂了,我们今天就来解决一哈. 什么是UML? UML是Unified Model Language的缩写,中文是统一建模语言, ...
- 付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具
PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档…很多都是PDF格式.它以格式稳定的优势,使得我们在打印.分享.传输过程中能 ...
- GPS位置显示在地图上
源码分析博客地址:https://blog.csdn.net/wuquan_1230/article/details/79614974 工具下载地址:http://download.csdn.net/ ...
- 027_go语言中的通道选择器
代码演示 package main import "fmt" import "time" func main() { c1 := make(chan strin ...
- Java实现短信验证码
前言 本人使用的是阿里短信服务,一开始尝试了许多不同的第三方短信服务平台,比如秒滴科技.梦网云通讯.当初开始为什么会选择这两个,首先因为,他们注册就送10元钱(#^.^#),但是后来却发现他们都需要认 ...
- 强开企业付款到零钱与现金红包,无需等待90/30天,2-12H即可强开通!
一.微信官方给出的,企业付款到零钱|现金红包开通的说明 针对入账方式为即时入账至商户号,结算周期为T+1的商户,需满足三个条件:1)入驻满90天,2)连续正常交易30天,3)保持正常健康交易.其余结算 ...
- golang 总结库
前言 这个是用来进行总结学习的,相当于自学笔记 记录的东西,是随时更新的, 有些东西,可能就是记录下,并不一定代表他一定能解决问题 不要做纯粹的文字的搬运工,要多做灵感整理 我看文章会看好多,所以常常 ...
- 关于vector的自我补充
insert()函数,选择性插入. insert(v.begin()+i,x)意思就是把x插入vector数组v的第i位置上(也是迭代器的位置上),其后面的数字都会自动后移.注意i是从0开始的! er ...
- 简谈DFS
所谓DFS就是“不撞南墙不回头”的一种搜索.其时间复杂度为O(V+E). 能算出从起点到终点的全部路径,在算法执行的过程中需要一个visit[vi]数组来维护每个结点的访问情况,这样就能避免重复访问. ...
- Selenium数据驱动测试模型和实例
模块驱动的模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不很适合了. 数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变. 装载数据的方式可以是列表. ...