提取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