一、接口自动化实现方式
工具类实现接口自动化:
1.Postman+Newman+git/svn+jenkins
2.jmeter+Ant+git/svn+jenkins
搭建代码框架实现接口自动化:
使用开发语言+工具类:如Java、Python
二、为什么做接口自动化框架
1.敏捷开发,迭代产品项目时,接口一般数量比较大,方便团队实现接口测试版本控制。(主要原因)
2.工具功能太死板,有些接口完全无法实现(比如复杂的加密接口,签名接口等,postman只能使用md5加密)
3.接口项目中有多种不同协议的接口。
4.排错困难,定位问题不方便,需要结合抓包实现。
5.没有办法生成美观的测试报告,特别是对外包公司来说。
6.多接口串联,数据库验证,日志监控等
7.有些公司做web自动化+接口自动化。
三、Python+requests模块实现接口自动化
1.requests第三方库主要用于发送http请求,做接口自动化
安装requests库:pip install requests
2.requests全局观
请求:
1.requests.get()发送get请求
2.requests.post()发送post请求
3.requests.delete()发送delete请求
4.requests.put()发送put请求
5.requests.request()最核心的方法
响应:
import requests
rep = requests.request()
#返回字符串数据
print(rep.text)
#返回字典格式的数据
print(rep.json())
#返回状态码
print(rep.status_code)
#返回cookies
print(rep.cookies)
#返回编码格式
print(rep.encoding)
#返回响应头
print(rep.headers)
3.接口实战
请求方式:get、post、delete、put
请求参数类型:键值对、JSON格式、文件格式。
import time
import pytest
import requests
# class setup_class:
class TestSendRequsets:
# def setup(self):
# print("每个用例执行之前")
# def teardown(self):
# print("每个用例执行之后")
# @pytest.fixture()
def test_getImgCode(self):
# 接口url
t = time.time()
timess = str(int(round(t * 1000)))
times = str(int(t))
url = "http://124.71.230.185:9002/jeecg-boot/sys/randomImage/" + "" + timess
# 参数
data = {
"_t": times,
}
# # get请求
rep = requests.request('get', url, params=data)
print(rep.text)
# 只执行smoke
# @pytest.mark.smoke
def test_Login(self):
# post请求
url = "http://124.71.230.185:9002/jeecg-boot/sys/login"
# 参数
data = {
"captcha": "Gkak!@#2019",
"checkKey": 1637811815838,
"password": "123456",
"remember_me": 1,
"username": "admin"
}
rep = requests.request('post', url, json=data)
statues = rep.json()["success"]
message = rep.json()["message"]
if statues:
print(message)
else:
# raise Exception(message)
print(message)
if __name__ == '__main__':
pytest.main(['-vs']);
用例管理框架:安装pytest
pip install pytest
默认规则:
1.测试文件以test结束或者已test开头
2.测试函数以test_开头
3.测试方法以Test开头,但不能带有init()方法;
注意:
get请求通过params传递参数
post请求通过json或者data传递参数,区别是:
data:
数据报文dict字典类型:默认情况下请求头是application/x-www-form-urlencoded,表示以form表单的形式传递,格式a=1&b=2&c=3
json:
数据报文:不管是dict类型还是str类型,默认都是application/json,格式{"a":1,"b":2}
json.dumps(data),序列化,把字典格式的数据转换成str类型的数据
json.loads(data),反序列化,把str格式转换成字典格式。