TCP/IP四层协议模型
HTTP协议

HTTP协议的特性




挥手:
HTTPS和HTTP的区别?
https就是http协议+ssl协议。https是安全的,http是不安全的。
http的默认端口号:80,https的默认端口号是443
请求头里面需要关注的点:
(1)URL地址:通过抓包直接看
(2)content-type:传递请求格式

响应码:301表示永久重定向,302暂时重定向。
如何去写接口测试用例?
从正向和反向以及业务逻辑上去考虑。
正向:填写正确的参数组合 p0
反向:功能异常(数据错误(非类型和长度错误),补充--已删除的用户名,登录失败);数据异常(传入参数为空,数据类型错误,数据长度错误);参数异常(多了参数,少了参数,没有参数)
业务逻辑:多个接口的组合的执行顺序,以及接口的依赖。
接口测试用例的编写包含的要素:
编号(ID),测试模块,用例名称(标题,预期结果(输入内容组合),如:登陆成功(用户名和密码正确)),前置条件(依赖接口),请求url,请求类型(post、get),请求头{字典格式},请求参数{字典格式},预期响应状态码,预期返回数据{响应体},优先级
接口测试代码撰写:
get请求传参方式:1.发送不带参数的get请求
# 发送不带参数的get请求
def func1():resp = requests.get('http://www.fanyunedu.com/mms/login.html')resp.encoding = 'utf8'print(resp.text)
def func2():resp = requests.get('http://www.tencent.com:5000/general/search?kw=健力宝')print(resp.text)
params1 = {'kw': 'bmw'}resp = requests.get('http://www.tencent.com:5000/general/search', params=params1)print(resp.text)
post请求传参,需要关注请求头里面的content-type这个字段:
都以字典的格式组装;但是在自动化中传参后,报文会自动变为&连接,如username=wang&password=123456,这种格式,而json格式传参后,依旧保持字典格式。
def func3():data = { # 参数组装的字典'username': 'admin','password': 'admin'}resp = requests.post('http://www.tencent.com/mms/Login/loginUser', data=data)print(resp.text)
data = {'username': 'class94','password': '123456','age': 1,'phone': '15888888888'}resp = requests.post('http://www.tencent.com:5000/general/register_json', json=data)print(resp.text)
3.multipart/form-data,通常是用来上传文件,下面有上传file的代码介绍。
def func4():headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36'}resp = requests.get('http://www.tencent.com:5000/', headers=headers)print(resp.text)
def func5():headers = {'Cookie': 'JSESSIONID=DD86F5991F9C6EFE19664D78B9FF9E02'}resp = requests.get('http://www.tencent.com/mms/Login/GetLoginName',headers=headers)print(resp.text)
def func6():sess = requests.Session() # 创建一个session,用于在代码中保持会话状态data = {'username': 'admin','password': 'admin123'}sess.post('http://www.tencent.com/mms/Login/loginUser', data=data)resp = sess.get('http://www.tencent.com/mms/Login/GetLoginName')print(resp.text)
上传文件---只有文件参数(记得带open,rb---二进制)
def func7():files = {'file': open(r'demo.txt', 'rb')}resp = requests.post('http://www.tencent.com:5000/general/api/upload', files=files)print(resp.text)
上传文件--除了有文件参数外,还有其它参数(文件参数和其他参数都要传)。上传文件只能用post,下载文件只能用get。
def func8():# 先构造普通参数data = {'batchname': 'GB20220322'}# 构造文件参数files = {'batchfile': open(r'demo.txt', 'rb')}resp = requests.post('http://taobao/goods/upload', data=data, files=files)print(resp.text)
下载普通文件-- 和python中文件读写类似(只能用get),将响应的text写入新建的文件中
def func9():resp = requests.get('http://www.taobao.com:5000/general/api/download?file=1647914731.txt')# 下载普通的文本文件with open('result.txt', 'w') as f:f.write(resp.text)
下载图片--响应体的内容格式是content,(通常的响应体的内容格式是text和html)
def func9():resp = requests.get('http://taobao/lancome/image/logo.png')with open('lancome.png', 'wb') as f:f.write(resp.content) # 不能使用resp.text
import hashlib
def func10():uid, name, password, salt = '4', 'admin', 'admin123', 'taue19BJIOz9n6W8'm = hashlib.md5()m.update(('{}-{}-{}-{}'.format(uid, name, password, salt)).encode('utf8'))sign = m.hexdigest()#完成加盐值加密,下面正常传请求参数就行data = {'uid': '4','sign': sign}resp = requests.post('http://www.tencent.com:5000/general/userinfo_sign', json=data)print(resp.text)
lxml库提取html页面源码的内容
import etree
def func12():sess = requests.Session() # 创建一个session,用于在代码中保持会话状态data = {'username': 'admin','password': 'admin123'}sess.post('http://www.taobao.com/mms/Login/loginUser', data=data)resp = sess.get('http://www.taobao.com/mms/mms/index.html')resp.encoding = 'utf8'html = etree.HTML(resp.text)# result = html.xpath("//a[@href='javascript:logOff()']/text()")result = html.xpath("//a[@href='javascript:logOff()']/@href")print(result)
根据响应内容,来获取返回值,再根据返回值获得其他信息。
def func14():data = {'username': 'admin','password': 'admin123'}resp = requests.post('http://www.tencent.com:5000/general/login_token', data=data) #先得到响应结果resp_json = resp.json() # 只适合于响应对象的值是json的情况,如果返回值不是json,则会报错 #再从响应结果中得到响应的json的内容token = resp_json['data'] #再从json里获取tokenheaders = {'auth-token': token}resp = requests.get('http://www.tencent.com:5000/general/userinfo_token', headers=headers) #带上token进入里面的网址,类似于cookieresp_json = resp.json() #里面的网址的json值print(resp_json['data']['联系方式']) #获取json里的data中的联系方式func14()