文章目录
一、PYTEST
1、使用pytest执行测试需要遵循的规则
- .py测试文件必须以test开头或test结尾
- 测试类必须以Test开头,并且不能有init方法
- 测试方法必须是test_开头
- 断言必须使用assert
2、数据驱动
@pytest.mark.parametrize('a,b', [(1, 2), (3, 4), (5, 6)])
def test_01(self, a, b):
print('-----test_01-----')
assert a + 1 == b # 断言
3、pytest.fixture
pytest.fixture(scope='session',autouse=True)
四种范围:包session、模块module、类class、方法function
auto:fixture自动执行、手动调用
4、结合ALLURE报告
if __name__ == "__main__":
# --alluredir 数据存放目录
pytest.main(['test_001.py', '-s','--alluredir','../report/tmp']) # -s 打印print语句内容
# # allure generate allure报告 为cmd指令,可通过os.system()执行
# # os.system('allure generate 报告需要的数据 -o 报告生成目录 清除以往数据')
os.system('allure generate ../report/tmp -o ../report/report --clean')
@allure.epic('XXX项目')
@allure.feature('登录页面')
@allure.story('登录功能')
5、pytest.assume
pip install assume-pytest
pytest.assume(断言内容) ## 属于软断言,断言时候了后面的内容也能执行。
## assert属于硬断言,若断言失败后面的内容将不会执行。
二、接口自动化内容
- Pytest框架设计分层接口自动化
- Allure定制化报告
- Excel与Yaml测试用例
- Mock模拟技术设计接口后端服务
- 项目中装饰器技术与log技术
- Docker实现自动化测试环境搭建
- Gitlab与jenkins实现持续集成自动化测试,支持定制化邮件与报告发送
1、接口自动化重要性
自动化测试:单元测试、接口测试、UI测试
接口自动化属中间层,投入产出高;可以加强开发跟测试人员协作,提高测试质量。
接口自动化目标:提前发现bug,发现隐藏bug,促进接口稳定,提高安全性。
2、接口自动化平台的框架
- 前端框架:Vue.js
- 后端框架:Spring Boot
- 数据库层:mysql+mongdb
- 数据库连接池:Druid
- 缓存:Ehcache
3、HTTP协议
① 接口文档、接口协议、抓包工具、变成能力、接口的数据类型
② HTTP解读:请求行、请求头、空白行、请求正文
③请求参数:json、data、params、files
resp=requests.post(url,data=payload)
payload=({'username':'ka0334','password':'e10adc3949ba59abbe56e057f20f883e'})
print(resp.text)
4、元素定位方法
基本定位方法:id、name、class_name、tag_name、link_text、partial_link_text。
高级元素定位:
① Xpath
- 单个属性定位://标签名[@属性=“值”]
- 文本定位://*[text()=“系统登录”]
- 模糊匹配://* [contains(@id,user)]、//*[contains(text(),“文本内容”)]
- 关于子代或者后代://* [text()=“系统登录”]/–子代元素、//*[text()=“系统登录”]//–后代元素
②CSS
- 单一属性定位:driver.find_element_by_css_selector(‘input’)
- id定位:driver.find_element_by_css_selector(‘#kw’)
- class定位:driver.find_element_by_css_selector(‘.s_ipt’)
- 其他属性定位:driver.find_element_by_css_selector(‘[name=‘wd’]’) ③ 单元素/多元素定位
- 单元素:找到返回第一个元素,找不到就报错
- 多元素:找到返回元素列表,找不到就返回空列表
5、等待
强制等待:time.sleep()
隐式等待:driver.implicitly(最大等待时间),全局等待,浏览器打开后立即设置。存在浪费时间的问题,可能关键元素早已出现。
显示等待:针对单个元素,可设置轮询时间,找到元素则停止。
元素找不到报错:可设置等待;若等待时间超时,判断是否前端页面渲染慢,还是后端返回给前端时间慢。
6、浏览器常用操作
- 控制浏览器窗口大小:设置全屏显示driver.maximize_window()、driver.set_window_size(600,600)
- 浏览器操作:driver.back()返回、driver.forward()前进到、driver.refresh()刷新界面
- 点击元素:driver.click()
- 输入框操作:sendKeys
- 获取元素文本内容操作:text()
- 获取元素属性值:get_attribute
7、高级元素操作
鼠标操作、键盘操作、文件上传操作、下拉框操作、警告窗操作、多页面窗口切换、内嵌页面iframe操作、页面滚动、窗口截图
二、软件理论补充
1、DevOps
学习文章:https://baijiahao.baidu.com/s?id=1692918919767968490&wfr=spider&for=pc
在DevOps的流程下,运维人员会在项目开发期间就介入到开发过程中,了解开发人员使用的系统架构和技术路线,从而制定适当的运维方案。而开发人员也会在运维的初期参与到系统部署中,并提供系统部署的优化建议。
关键点:微服务、虚拟化、自动化
2、HTTP与 WebSocket 的差异
①HTTP请求
import requests
resp=requests.post/get(url,params/files/data=payload,headers={'Authorzation':inToken})
return resp.json()
构建连接需要获取token,调用时将token作为请求头传入。
常见请求体内容:
data:表单数据,a=1&b=2
json:json字段,{“a”:“hello”}
params:get请求
files:文件上传接口
② WEBSOCKET请求
下载第三方库
pip install websocket-client
与上者相比,多了一个结尾断开连接过程。
import json
from websocket import create_connection
# 1、建立连接
ws = create_connection("ws://127.0.0.1:5000/info")
# 2、获取连接状态
print("获取连接状态:", ws.getstatus())
# 3、发送请求参数
ws.send('发送数据 hello musen')
# 4、获取返回结果
result = ws.recv()
print("接收结果:", result)
# 5、关闭连接
ws.close()
版权归原作者 Cheryl_Xu 所有, 如有侵权,请联系我们删除。