python自动化测试断言方式总结

1.UI自动化断言


https://ceshiren.com/t/topic/21361
1.1常规UI自动化断言

# 第一种 :比较大小
price = driver.find_element(
    By.XPATH,'//*[contains(@resource-id="current_price")]').text
assert float(price) >=170

# 第二种 :包含验证
name = driver.find_element(
    By.XPATH,'//*[contains(@resource-id="stockName")]').text
assert "BABA" in name

# 第三种 :布尔值验证
def check():
    name = driver.find_elements(By.XPATH,'//*[contains(@resource-id="stockName")]')
    return True if len(name)!=0 else False
assert check()

1.2Hamcrest断言
https://ceshiren.com/t/topic/16765
Hamcrest 是一个以测试为目的,能组合成灵活表达式的匹配器类库,用于编写断言的框架,使用这个框架编写断言,可以提高可读性以及开发测试的效率。Hamcrest 提供了大量被称为“匹配器”的方法。每个匹配器都设计用于执行特定的比较操作。Hamcrest 的可扩展性强,允许创建自定义的匹配器,并支持多种语言。

# 安装
pip install pyhamcrest
# 导包
from hamcrest import *

断言方式

# 1.比较两个字符串相等,示例代码如下:
assert_that("this is a string",equal_to("this is a string"))
# 2.数值匹配,比较两个值是否接近,示例代码如下:
# 解释:断言 8 接近于 (8 ~ 12)这个范围。
assert_that(8,close_to(10,2))
# 3.包含某个字符,示例代码如下:
assert_that('abc',contains_string('d'))

REST-Assured

2.接口自动化断言


接口入参很多 https://ceshiren.com/t/topic/3753
1. Jayway JsonPath
2. Mustache

2.1jsonpath
用于JSON文档的查询语言,它提供了一种简洁的方式来定位和筛选JSON数据
https://ceshiren.com/t/topic/21856

import requests
from jsonpath import jsonpath
r = requests.get("https://ceshiren.com/t/topic/6950.json").json()
result = jsonpath(r, "$..posts[?(@.name == '思寒')].cooked")[1]
assert "涨薪" in result

2.2JSONSchema
https://ceshiren.com/t/topic/27113
https://ceshiren.com/t/topic/21915
整体结构响应断言(场景:针对少量业务字段断言,其他字段不做数据正确性断言,只做类型和整体结果的校验)

ms题 :https://ceshiren.com/t/topic/23241/3
操作:
1.预先生成对应结构的Schema.
2.将实际取到的响应与预先生成的Schema进行对比。

2.3GPath
用于XML和HTML文档的查询语言,它类似于XPath
xml格式响应断言 https://ceshiren.com/t/topic/21788

GPath和jsonpath的区别
https://ceshiren.com/t/topic/29384
https://ceshiren.com/t/topic/29385


1.对xml格式数据断言https://ceshiren.com/t/topic/21788

2.selenium get_attribute
https://www.codenong.com/cs109099358/
获取元素属性值,做断言

driver.find_element(xx).get_attribute('textContent')   #获取元素标签内容
driver.find_element(xx).text                          #等同上边的方法
driver.find_element(xx).get_attribute('innerHTML')   # 获取元素内的全部HTML
driver.find_element(xx).get_attribute('outerHTML')   # 获取包含选中元素的HTML