一、python+requests模块
(1)requests全局观
安装:pip install requests 1.发送哀求
①requests.get() 发送get哀求
②requests.post() 发送post哀求
data和json的区别:取绝于你需要通报的参数的类型。 files:文件上传 ----------------------- form-data:表单和文件上传 x-www-form-urlencoded:纯表单 raw: json (参数为Json) binary: 把文件转化成二进制传输 ③requests.delete() 发送delete哀求
④requests.put() 发送put哀求
前面的四个方法底层其实都是调用下面这个方法 ⑤requests.request 最核心的方法
上面这个方法调用的是下面这个方法(区别在于,这个方法能够自动化的关联有cookie关联的接口。) session.request(method=method, url=url, **kwargs) method=method, 哀求方式 url=url, 哀求路径 params=None, get哀求传参 data=None, post或者put哀求传参 json=None post哀求传参 23 headers=None, 哀求头 24 cookies=None, Cookie 25 files=None, 文件上传 26 ----------------------- 27 auth=None, 鉴权 28 timeout=None, 超时处置惩罚 29 allow_redirects=True, 是否允许重定向 30 proxies=None, 设置代理 31 hooks=None, 钩子 32 stream=None, 文件下载 33 verify=None, 证书验证 34 cert=None, CA证书 35 天生一个session对象 requests.session() 2.吸取响应:response对象
1 print ( res . text ) 返回的文本信息 2 print ( res . json ()) 返回的 json 格式 3 print ( res . content ) 返回的字节内容 4 print ( res . status_code ) 返回的状态码 5 print ( res . reason ) 返回的状态信息 6 print ( res . cookies ) 返回的 cookie 7 print ( res . encoding ) 返回编码格式 8 print ( res . headers ) 返反响应头 9 print ( res . request . 哀求数据 ) 返回哀求数据 (2)接口自动化实战以及正则和Jsonpath提取器的应用
五、代码实现接口自动化(黑马步伐员)
视频网址:032_接口自动化测试底子介绍_哔哩哔哩_bilibili
(1)底子介绍
(2)接口自动化测试框架介绍
(3)requests入门
(4)接口对象封装--登录
接口对象层
- #接口封装时,重点是依据接口文档封装接口信息,需要使用的测试数据是从测试用例传递的、接口方法被调用时需要返回对应的响应结果
- #导包
- import requests
- #创建接口类
- class LoginAPI:
- def __init__(self):
- # 指定url基本信息
- self.url_verify="http://kdtx-test.itheima.net/api/captchaImage"
- self.url_login="http://kdtx-test.itheima.net/api/login"
- #验证码
- def get_verify_code(self):
- return requests.get(url=self.url_verify)
- #登录
- def login(self,test_data):
- return requests.post(url=self.url_login,json=test_data)
复制代码 测试脚本层
- #导包
- from api.login import LoginAPI
- #创建测试类
- class TestContractBusiness:
- #前置处理
- def setup(self):
- #实例化接口对象
- self.login_api=LoginAPI()
- #后置处理
- def teardown(self):
- pass
- #登录成功
- def test01_login_success(self):
- #获取验证码
- res_v=self.login_api.get_verify_code()
- print(res_v.status_code)
- print(res_v.json())
- #打印uuid数据
- print(res_v.json().get("uuid"))
- #登录
- login_data={
- "username":"admin",
- "password":"HM_2023_test",
- "code":"2",
- "uuid":res_v.json().get("uuid")
- }
- res_l=self.login_api.login(test_data=login_data)
- print(res_l.status_code)
- print(res_l.json())
复制代码
(5)合同新增业务
课程添加--接口封装
- #课程模块接口封装:核心在于依据接口文档实现接口信息封装,重点关注接口如何被调用
- #导包
- import requests
- #创建接口类
- class CourseAPI:
- #初始化
- def __init__(self):
- self.url_add_course="http://kdtx-test.itheima.net/api/clues/course"
- #课程添加
- def add_course(self,test_data,token):
- return requests.post(url=self.url_add_course,json=test_data,headers={"Authorization":token})
-
复制代码 课程添加--测试脚本
- #导包
- from api.login import LoginAPI
- from api.course import CourseAPI
- #创建测试类
- class TestContractBusiness:
- #初始化
- token=None
- #前置处理
- def setup(self):
- #实例化接口对象
- self.login_api=LoginAPI()
- self.course_api=CourseAPI()
- #后置处理
- def teardown(self):
- pass
- #登录成功
- def test01_login_success(self):
- #获取验证码
- res_v=self.login_api.get_verify_code()
- print(res_v.status_code)
- print(res_v.json())
- #打印uuid数据
- print(res_v.json().get("uuid"))
- #登录
- login_data={
- "username":"admin",
- "password":"HM_2023_test",
- "code":"2",
- "uuid":res_v.json().get("uuid")
- }
- res_l=self.login_api.login(test_data=login_data)
- print(res_l.status_code)
- print(res_l.json())
- #提取登录成功之后的token数据并保存在类的属性中
- TestContractBusiness.token=res_l.json().get("token")
- print(TestContractBusiness.token)
- #2.课程新增成功
- def test02_add_course(self):
- add_data={"name":"测试开发提升课01","subject":"6","price":899,"applicablePerson":"2","info":"测试开发提升课01"}
- response=self.course_api.add_course(test_data=add_data,token=TestContractBusiness.token)
- print(response.json())
复制代码 合同上传--封装与调用
封装
- #导包
- import requests
- #创建接口类
- class ContractAPI:
- #初始化
- def __init__(self):
- self.url_upload="http://kdtx-test.itheima.net/api/common/upload"
- #合同上传接口
- def upload_contract(self,test_data,token):
- return requests.post(url=self.url_upload,files={"file":test_data},headers={"Authorization":token})
复制代码 调用
- #导包
- from api.login import LoginAPI
- from api.course import CourseAPI
- from api.contract import ContractAPI
- #创建测试类
- class TestContractBusiness:
- #初始化
- token=None
- #前置处理
- def setup(self):
- #实例化接口对象
- self.login_api=LoginAPI()
- self.course_api=CourseAPI()
- self.contract_api=ContractAPI()
- #后置处理
- def teardown(self):
- pass
- #登录成功
- def test01_login_success(self):
- #获取验证码
- res_v=self.login_api.get_verify_code()
- print(res_v.status_code)
- print(res_v.json())
- #打印uuid数据
- print(res_v.json().get("uuid"))
- #登录
- login_data={
- "username":"admin",
- "password":"HM_2023_test",
- "code":"2",
- "uuid":res_v.json().get("uuid")
- }
- res_l=self.login_api.login(test_data=login_data)
- print(res_l.status_code)
- print(res_l.json())
- #提取登录成功之后的token数据并保存在类的属性中
- TestContractBusiness.token=res_l.json().get("token")
- print(TestContractBusiness.token)
- #2.课程新增成功
- def test02_add_course(self):
- add_data={"name":"测试开发提升课01","subject":"6","price":899,"applicablePerson":"2","info":"测试开发提升课01"}
- response=self.course_api.add_course(test_data=add_data,token=TestContractBusiness.token)
- print(response.json())
- #3.上传合同成功
- def test03_upload_contract(self):
- #读取pdf文件数据
- f=open("../data/test.pdf","rb")
- response=self.contract_api.upload_contract(test_data=f,token=TestContractBusiness.token)
- print(response.json())
复制代码 合同新增--封装与调用
封装
- #导包
- import requests
- #创建接口类
- class ContractAPI:
- #初始化
- def __init__(self):
- self.url_upload="http://kdtx-test.itheima.net/api/common/upload"
- self.url_contract="http://kdtx-test.itheima.net/api/contract"
- #合同上传接口
- def upload_contract(self,test_data,token):
- return requests.post(url=self.url_upload,files={"file":test_data},headers={"Authorization":token})
- #合同新增
- def add_contract(self,test_data,token):
- return requests.post(url=self.add_contract,json=test_data,headers={"Authorization":token})
-
复制代码 调用
- #导包
- from api.login import LoginAPI
- from api.course import CourseAPI
- from api.contract import ContractAPI
- #创建测试类
- class TestContractBusiness:
- #初始化
- token=None
- #前置处理
- def setup(self):
- #实例化接口对象
- self.login_api=LoginAPI()
- self.course_api=CourseAPI()
- self.contract_api=ContractAPI()
- #后置处理
- def teardown(self):
- pass
- #登录成功
- def test01_login_success(self):
- #获取验证码
- res_v=self.login_api.get_verify_code()
- print(res_v.status_code)
- print(res_v.json())
- #打印uuid数据
- print(res_v.json().get("uuid"))
- #登录
- login_data={
- "username":"admin",
- "password":"HM_2023_test",
- "code":"2",
- "uuid":res_v.json().get("uuid")
- }
- res_l=self.login_api.login(test_data=login_data)
- print(res_l.status_code)
- print(res_l.json())
- #提取登录成功之后的token数据并保存在类的属性中
- TestContractBusiness.token=res_l.json().get("token")
- print(TestContractBusiness.token)
- #2.课程新增成功
- def test02_add_course(self):
- add_data={"name":"测试开发提升课01","subject":"6","price":899,"applicablePerson":"2","info":"测试开发提升课01"}
- response=self.course_api.add_course(test_data=add_data,token=TestContractBusiness.token)
- print(response.json())
- #3.上传合同成功
- def test03_upload_contract(self):
- #读取pdf文件数据
- f=open("../data/test.pdf","rb")
- response=self.contract_api.upload_contract(test_data=f,token=TestContractBusiness.token)
- print(response.json()) #4.合同新增成功 def test04_add_contract(self): #contractNo:数据唯一 add_data={"name":"测试888","phone":"13870630671", "contractNo":"HT2112603","subject":"6","courseId":"99", "channel":"0","activityId":77,"fileName":"文件" } response=self.contract_api.add_contract(test_data=add_data,token=TestContractBusiness.token) print(response.json())
复制代码
(6)登录单接口测试
- #导包
- from api.login import LoginAPI
- #创建测试类
- class TestLoginAPI:
- #初始化
- uuid=None
- #前置处理
- def setup(self):
- #实例化接口类
- self.login_api=LoginAPI()
- #获取验证码
- response=self.login_api.get_verify_code()
- print(response.json())
- #提取验证码接口返回的uuid参数值
- TestLoginAPI.uuid=response.json().get("uuid")
- print(TestLoginAPI.uuid)
- #后置处理
- def teardown(self):
- pass
- #登录成功
- def test01_success(self):
- login_data={
- "username":"admin",
- "password":"HM_2023_test",
- "code":"2",
- "uuid":TestLoginAPI.uuid
- }
- response=self.login_api.login(test_data=login_data)
- #断言响应状态码为200
- assert 200 == response.status_code
- #断言响应数据包含‘成功’
- assert '成功' in response.text
- #断言响应json数据中code值
- assert 200 == response.json().get("code")
- #登录失败(用户名为空)
- def test01_success(self):
- login_data={
- "username":"",
- "password":"HM_2023_test",
- "code":"2",
- "uuid":TestLoginAPI.uuid
- }
- response=self.login_api.login(test_data=login_data)
- #断言响应状态码为200
- assert 200 == response.status_code
- #断言响应数据包含‘错误’
- assert '错误' in response.text
- #断言响应json数据中code值
- assert 500 == response.json().get("code")
- #登录失败(未注册用户)
- def test01_success(self):
- login_data = {
- "username": "jack666",
- "password": "HM_2023_test",
- "code": "2",
- "uuid": TestLoginAPI.uuid
- }
- response = self.login_api.login(test_data=login_data)
- # 断言响应状态码为200
- assert 200 == response.status_code
- # 断言响应数据包含‘错误’
- assert '错误' in response.text
- # 断言响应json数据中code值
- assert 500 == response.json().get("code")
复制代码
数据驱动实现
- #导包
- from api.login import LoginAPI
- import pytest
- #测试数据
- test_data=[
- ("admin","HM_2023_test",200,'成功',200),
- ("","HM_2023_test",200,"错误",500),
- ("jack666","HM_2023_test",200,"错误",500),
- ]
- #创建测试类
- class TestLoginAPI:
- #初始化
- uuid=None
- #前置处理
- def setup(self):
- #实例化接口类
- self.login_api=LoginAPI()
- #获取验证码
- response=self.login_api.get_verify_code()
- print(response.json())
- #提取验证码接口返回的uuid参数值
- TestLoginAPI.uuid=response.json().get("uuid")
- print(TestLoginAPI.uuid)
- #后置处理
- def teardown(self):
- pass
- #登录成功
- @pytest.mark.parametrize("username,password,status,message,code",test_data)
- def test01_success(self,username,password,status,message,code):
- login_data={
- "username":username,
- "password":password,
- "code":"2",
- "uuid":TestLoginAPI.uuid
- }
- response=self.login_api.login(test_data=login_data)
- #断言响应状态码为200
- assert status == response.status_code
- #断言响应数据包含‘成功’
- assert message in response.text
- #断言响应json数据中code值
- assert code == response.json().get("code")
复制代码 json文件实现数据驱动
修改代码
完整代码
- #导包
- from api.login import LoginAPI
- import pytest
- import json
- # #测试数据
- # test_data=[
- # ("admin","HM_2023_test",200,'成功',200),
- # ("","HM_2023_test",200,"错误",500),
- # ("jack666","HM_2023_test",200,"错误",500),
- # ]
- #读取json文件
- def build_data(json_file):
- #定义空列表
- test_data=[]
- #打开json文件
- with open(json_file, 'r', encoding='utf-8') as f:
- #加载json文件数据
- json_data=json.load(f)
- #循环遍历测试数据
- for case_data in json_data:
- #转换数据格式[{},{}]==>[(),()]
- username=case_data.get("username")
- password=case_data.get("password")
- status=case_data.get("status")
- message=case_data.get("message")
- code=case_data.get("code")
- test_data.append((username,password,status,message,code))
- #返回处理之后的测试数据
- return test_data
- #创建测试类
- class TestLoginAPI:
- #初始化
- uuid=None
- #前置处理
- def setup(self):
- #实例化接口类
- self.login_api=LoginAPI()
- #获取验证码
- response=self.login_api.get_verify_code()
- print(response.json())
- #提取验证码接口返回的uuid参数值
- TestLoginAPI.uuid=response.json().get("uuid")
- print(TestLoginAPI.uuid)
- #后置处理
- def teardown(self):
- pass
- #登录成功
- @pytest.mark.parametrize("username,password,status,message,code",build_data(json_file="../data/login.json"))
- def test01_success(self,username,password,status,message,code):
- login_data={
- "username":username,
- "password":password,
- "code":"2",
- "uuid":TestLoginAPI.uuid
- }
- response=self.login_api.login(test_data=login_data)
- #断言响应状态码为200
- assert status == response.status_code
- #断言响应数据包含‘成功’
- assert message in response.text
- #断言响应json数据中code值
- assert code == response.json().get("code")
复制代码 (7)课程管理
①课程添加接口自动化测试
②课程查询列表单接口自动化测试
③课程修改单接口自动化测试
④课程删除单接口自动化测试
(8)项目配置文件
(9)Allure测试报告
报错及其办理
(1)pip install requests堕落
缘故原由:版本不敷高,SSL缺失
办理方法:安装最新版本python后办理
办理方法:
更新 pip: 使用 Python 表明器自带的 pip 版本更新命令来确保 pip 是最新的:
python -m pip install --upgrade pip
修复 pip 安装: 可以尝试修复 pip 的安装,有时间重新安装 pip 可能会办理题目:
python -m pip install --force-reinstall pip
(2)PyCharm添加python表明器时出现[unsupported]
缘故原由:Pycharm版本与python3.12.4不兼容
办理方法:下载更高版本的Pycharm,比如Pycharm2023.1
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |