作者:手机用户2602905043 | 来源:互联网 | 2023-07-31 12:40
一、什么是接口自动化测试?
让程序或工具代替人工自动化的完成对接口进行测试的一种过程。
二、实现方式:
- 工具(Jmeter,postman)
- 代码(python-requests)
三、测试工具缺点:
- 测试数据不好控制(无法直接读取或存储json格式)
- 测试数据加密不方便
- 扩展性不足(复杂业务逻辑)
四、本次学习目标:基于python结合requesrs库实现接口自动化测试
五、Requests库介绍:
- 使用python语言编写
- 使用开源协议,基于urllib库做的二次封装
- Requests库中封装了相应接口测试方法
1、GET方法(响应状态码:200)
#1.导包
import requests
#2.调用get
url="http://127.0.0.1:8080/demo/cheliangxinxi/list/"
r=requests.get(url)
#3.获取请求url地址
print("url为:",r.url)
#4.获取响应状态码
print("状态码为:",r.status_code)
#5.获取响应信息,文本形式
print("响应信息为:",r.text)
print(r.headers)
l=r.encoding='ASCI'
print(r.encoding)
2、GET方法请求带参数
#1.导包
import requests#2.调用get
url="http://www.baidu.com"
#参数:params:字典或字符串(推荐使用字典)
#字典
params={"id":1001,"kw":"北京"} # %2c ASCI值为逗号
#字符串
#r=requests.get(url,params="id=1001")
r=requests.get(url,params=params)
#不推荐写法
#url="http://www.baidu.com?id=1001"
#3.获取请求url地址
print("url为:",r.url)
#4.获取响应状态码
print("状态码为:",r.status_code)
#5.获取响应信息,文本形式
print("响应信息为:",r.text)
3、PUT方法(响应状态码:200或201)
import requests
url="http://127.0.0.1:8080/demo/cheliangxinxi/edit/180/"
headers={"Content-Type":"application/json"}
data={"data": [{"id": "180","chehao":"T01","pinzhong": "Test学院update"}]
}r=requests.put(url,json=data,headers=headers)
print(r.json())print(r.status_code)
4、POST方法(响应状态码:201)
import requests
url="http://127.0.0.1:8080/demo/cheliangxinxi/add/"
headers={"Content-Type":"application/json"}
data={"data": [{"chehao":"T01","pinzhong": "Test学院"}]
}r=requests.post(url,json=data,headers=headers)
print(r.json())
print(r.status_code)
print(r.text)
5、传递参数json与data格式的区别?
data:字典对象
json:json字符串
6、如何将字典对象转换为json字符串?
1.导入json包
2.json.dumps(字典对象)
7、响应数据json()与text区别?
json():双引号,返回类型字典,可以通过键名来获取响应的值
text:单引号,返回的类型为字符串,无法通过键名俩获取响应的值
8、DELETE方法(响应状态码:204)
import requests
url="http://127.0.0.1:8080/demo/cheliangxinxi/remove/190/"
r=requests.delete(url)print(r.status_code)
六、响应对象的方法
1.encoding
查看默认请求编码格式:响应对象.encoding
设置响应编码格式 响应对象.encoding=”utf-8”
2.headers 获取服务器响应信息头
响应对象.headers
3.COOKIEs获取响应cokkies信息(服务器产生)
4.text:以文本形式解析
5.content:以字节码形式解析响应内容
6.json() 以json字符串格式解析响应内容
七、案例:
TPShop商城的获取验证码,登陆成功,获取订单信息
import requests
import json
#获取验证码
url="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=verify"
r=requests.get(url)#获取COOKIE
r_COOKIE=r.COOKIEs
print(r_COOKIE)
print("单独获取COOKIE值:",r_COOKIE['PHPSESSID'])#设置COOKIE变量
COOKIEs={"PHPSESSID":r_COOKIE['PHPSESSID']}url_login="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=do_login"
data={"username": "15991986680","password": "Wxm131411","region": "8888"
}
r_login=requests.post(url=url_login,json=data,COOKIEs=COOKIEs)
print(r_login.json())
#获取订单信息
url_order="http://demo6.tp-shop.cn/index.php/Home/Order/order_list.html"
r=requests.get(url=url_order,COOKIEs=COOKIEs)
print(r.text)
Session:完成一次会话(从客户端和服务器创建请求连接开始,到客户端和服务器断开连接结束)
session可以自动保存服务器产生的COOKIEs信息,并且自动在下一条请求时附加。
应用:通过session对象.方法
session.get()
session.post()
session.put()
session.delete()
无论是requests还是session返回结果都是responsebody
八、TPShop案例session版本
import requests
import json
#获取验证码
url="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=verify"
r=requests.get(url)#获取COOKIE
r_COOKIE=r.COOKIEs
print(r_COOKIE)
print("单独获取COOKIE值:",r_COOKIE['PHPSESSID'])#设置COOKIE变量
COOKIEs={"PHPSESSID":r_COOKIE['PHPSESSID']}url_login="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=do_login"
data={"username": "15991986680","password": "Wxm131411","region": "8888"
}
session=requests.session()
r_login=session.post(url=url_login,json=data)
print(r_login.json())
#获取订单信息
url_order="http://demo6.tp-shop.cn/index.php/Home/Order/order_list.html"
r=session.get(url=url_order)
print(r.text)
九、unittest与requests结合
继承unittest.TestCase,以test开头的方法就是一条用例
setup:
作用:test开始方法执行之前,首先会被执行
teardown:
作用:test开始方法执行之后,会被执行
test_login_success:
作用:登陆成功
test_username_not_exist
作用:登陆失败,用户名不存在
test_password_error
作用:登陆失败,密码错误
import unittest
import requests
class TPShopLogin(unittest.TestCase):def setUp(self):#获取session对象self.session=requests.session()#登陆urlself.url_login="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=do_login"#验证码urlself.url_verify="http://demo6.tp-shop.cn/index.php?m=Home&c=User&a=verify"def tearDown(self):self.session.close()#关闭sessiondef test_login_sucess(self):#请求验证码self.session.get(self.url_verify)data = {"username": "15991986680","password": "Wxm131411","region": "8888"}#请求登陆r=self.session.post(self.url_login,json=data)#断言try:self.assertEqual("登陆成功",r.json()['msg'])except AssertionError as e:print(e)def test_username_not_exist(self):# 请求验证码self.session.get(self.url_verify)data = {"username": "159919866801","password": "Wxm131411","region": "8888"}# 请求登陆r = self.session.post(self.url_login, json=data)# 断言try:self.assertEqual("用户名不存在", r.json()['msg'])except AssertionError as e:print(e)def test_password_error(self):# 请求验证码self.session.get(self.url_verify)data = {"username": "15991986680","password": "Wxm13141111","region": "8888"}# 请求登陆r = self.session.post(self.url_login, json=data)# 断言try:self.assertEqual("密码错误", r.json()['msg'])except AssertionError as e:print(e)def test_verify_error(self):# 请求验证码self.session.get(self.url_verify)data = {"username": "15991986680","password": "Wxm13141111","region": "8888"}# 请求登陆r = self.session.post(self.url_login, json=data)# 断言try:self.assertEqual("验证码错误", r.json()['msg'])except AssertionError as e:print(e)if __name__=='__main__':unittest.main()