pytest 可以做单元测试、接口测试、UI测试自动化
1. pytest是一个非常成熟的python的单元框架,比unittest更灵活。
2. pytest可以和selenium,requests,appium结合实现web自动化,接口自动化,app自
动化。
3. pytest可以实现测试用例的跳过以及reruns失败用例重试。
4. pytest可以和allure生成非常美观的测试报告。
5. pytest可以和Jenkins持续集成。
6. pytest有很多非常强大的插件,并且这些插件能够实现很多的实用的操作。
pytest自动化框架:
HTTP是什么 ?
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
超文本传输协议是一种应用层协议,是万维网WWW(World Wide Web)的数据通信的基础。
访问一个网站的内部流程
1、访问网址,DNS先进行域名的解析
2、客户端向服务端发起TCP请求,三次握手进行连接
3、客户端向服务端发送HTTP请求(request)
4、服务端向客户端返回HTTP(response)
5、客户端拿到数据进行页面渲染
HTTP资源:
HTTP请求方式:
GET:获取
POST:增加
PUT:修改
DELETE:删除
其他的诸如 HEAD、CONNECT、OPTIONS、TRACE、PATCH 不常用
HTTP状态码
测试接口:
http://sellshop.5istudy.online/sell/shouji/query?shouji=15618919442&appkey=0c818521d38759e1
使用POSTMAN
1、GET(URL+Params)
import requests
params = {
"shouji":"15618919442",
"appkey":"0c818521d38759e1"
}
res = requests.get(url = "http://sellshop.5istudy.online/sell/shouji/query")
print(res.status_code)
print(res.json())
res = requests.get(url = "http://sellshop.5istudy.online/sell/shouji/query",params = params)
print(res.status_code)
result = res.json()['result']
assert result['shouji'] == '15618919442'
assert result['province'] == '上海'
assert result['city'] == '上海'
assert result['company'] == '中国联通'
assert result['areacode'] == '0571'
2、POST
(1) URL + Params
import requests
params = {
"shouji":"15618919442",
"appkey":"0c818521d38759e1"
}
res = requests.post(url = "http://sellshop.5istudy.online/sell/shouji/query",params = params)
print(res.status_code)
result = res.json()['result']
print(result)
assert result['shouji'] == '15618919442'
assert result['province'] == '上海'
assert result['city'] == '上海'
assert result['company'] == '中国联通'
assert result['areacode'] == '0571'
(2) URL+ JSON 对应postman的body-raw-JSON
json_data = {
"appkey":"JS05KY1G393HQI"
}
res = requests.post(url = "https://otheve.beacon.qq.com/analytics/v2_upload",json = json_data )
print(res.status_code)
(3) URL + text 对应postman的body-formdata
import requests
datas = {
"shouji":"15618919442",
"appkey":"0c818521d38759e1"
}
res = requests.post(url = "http://sellshop.5istudy.online/sell/shouji/query",data = datas)
print(res.status_code)
result = res.json()['result']
print(result)
assert result['shouji'] == '15618919442'
assert result['province'] == '上海'
assert result['city'] == '上海'
assert result['company'] == '中国联通'
assert result['areacode'] == '0571'
注意:要用哪种请求方式,输入哪种参数,才能获取到正确的返回值,是由开发实现的。开发的代码实现,决定了我们要按照他设定的方式,发送请求。
另外再关注一个参数headers,当遇到403返回码(反爬虫)将user-agent添加到headers,传递给request
import urllib.request
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)