提取html工具封装和应用
- BeautifulSoup库和介绍
- BeautifulSoup使用
- BeautifulSoup重点方法
- BeautifulSoup其他方法
- 认证参数化实现
- 创建json文件
- 导包(参数化)
- 编写测试用例
- 技术难点--判断验证码不同
BeautifulSoup库和介绍
BeautifulSoup使用
1、导包
2、实例化
3、调⽤⽅法
# 1、导包
from bs4 import BeautifulSoup
html = """
<html>
<head>
<title>⿊⻢程序员</title>
</head>
<body>
<p id="test01">软件测试</p>
<p id="test02">2020年</p>
<a href="/api.html">接⼝测试</a>
<a href="/web.html">Web⾃动化测试</a>
<a href="/app.html">APP⾃动化测试</a>
</body>
</html>
"""
# 2、获取bs对象 告诉BeautifulSoup类,你要解析的是hmtl格式
bs = BeautifulSoup(html, "html.parser")
# 3、调⽤⽅法
"""
重点:
1、查找所有标签 bs.find_all("标签名") == 元素的集合 == ["元素1","元素2"]
2、查找属性 元素.get("属性名")
"""
for a in bs.find_all("a"):
print(a.get("href"))
BeautifulSoup重点方法
1、查找所有标签 bs.find_all(“标签名”) == 元素的集合 == [“元素1”,“元素2”]
2、查找属性 元素.get(“属性名”)
BeautifulSoup其他方法
# 4、扩展其他⽅法
# 获取单个元素 bs.标签名
print(bs.a)
# 获取⽂本
print(bs.a.string)
# 获取属性
print(bs.a.get("href"))
# 获取标签名
print(bs.a.name)
认证参数化实现
创建json文件
{
"img_code": [
{
"desc": "获取图片验证码成功(随机小数)",
"random": 0.123,
"expect_code": 200
},
{
"desc": "获取图片验证码成功(随机整数)",
"random": 123,
"expect_code": 200
},
{
"desc": "获取图片验证码失败(随机数为空)",
"random": "",
"expect_code": 404
},
{
"desc": "获取图片验证码失败(随机数为字符串)",
"random": "123hello",
"expect_code": 400
}
],
"recharge":[
{
"desc": "后台充值响应成功",
"valicode": 8888,
"expect_text": "OK"
},
{
"desc": "后台充值响应成功",
"valicode": 8889,
"expect_text": "验证码错误"
}
]
}
导包(参数化)
编写测试用例
编写你的测试用例,使用 @parameterized.expand 装饰器来指定参数化的测试数据。
技术难点–判断验证码不同
1、充值需要判断验证码不同,执⾏步骤和结果不同
思路:
1、调⽤图⽚验证码–>记录cookie
2、调⽤充值接⼝(验证码)
3、判断验证码为8888
条件成立:1.提取响应数据 2.三方充值 3.断言
4、否则–直接断言
# 5.充值接口测试
@parameterized.expand(read_json("approve_trust.json","recharge"))
def test05_recharge(self, valicode,expect_text):
try:
#调用图片验证码
self.approve.api_img_code(1231123)
# 调用认证接口
r = self.approve.api_recharge(valicode)
log.info("查询认证状态返回数据:{}".format(r.json()))
if valicode == 8888:
# 断言
self.assertIn("form", r.text)
log.info("断言通过!")
# 三方开户
result = parser_html(r)
r = self.session.post(url=result[0], data=result[1])
print("三方充值的结果为:", r.text)
self.assertIn(expect_text, r.text)
log.info("接口执行结果为:{}".format(r.text))
else:
self.assertIn(expect_text, r.text)
print("验证码错误为:",r.text)
except Exception as e:
# 日志
log.error("断言错误! 原因:{}".format(e))
# 异常
raise