pytest框架的封装以及用例管理框架
- 公共类
- 统一封装
- requests_util02.py
- test_api01.py
- 自动化测试的基础
- 自动化测试的介入点
- 自动化测试和手工测试占比
- 自动化实施过程
- pytest元素定位
- 元素定位查找
- 元素定位的方式
- 通过 ID 定位
- 通过 Name 定位
- 通过 Class Name 定位
- 通过 Tag Name 定位
- 通过 XPath 定位
- 通过 CSS Selector 定位
- 通过 Link Text 定位(用于定位链接)
- 通过 Link Text 定位(用于定位链接)
- 案例分析
公共类
import requests
class RequestsUtil02:
# 创建一个 requests 库的会话
sess = requests.session()
# 定义一个发送所有请求的函数
def send_all_request(self, **kwargs):
# 使用会话对象发送请求
res = self.sess.request(**kwargs)
# 返回响应对象
return res
统一封装
requests_util02.py
import requests
class RequestsUtil02:
# 创建一个 requests 库的会话
sess = requests.session()
# 定义一个发送所有请求的函数
def send_all_request(self, **kwargs):
# 使用会话对象发送请求
res = self.sess.request(**kwargs)
print(res.json())
# 返回响应对象
return res
def send_all_reuqest(self, method, url, params):
pass
test_api01.py
import jsonpath
import requests
from common_02.requests_util02 import RequestsUtil02
class TestApi:
#创建一个类变量
access_token=" "
#获取鉴权码的接口
def test_get_token(self):
urls = "https://api.weixin.qq.com/cgi-bin/token"
datas = {
"grant_type": "client_credential",
"appid": "wx8a9de038e93f77ab",
"secret": "8326fc915928dee3165720c910effb86"
}
res=RequestsUtil02().send_all_reuqest(method="get",url=urls, params=datas)
# print(res.json())
# res = requests.get(url=urls, params=datas)
# 从响应结果中解析出 JSON 数据,并使用 jsonpath 提取出 access_token 的值
# jsonpath.jsonpath() 返回一个列表,包含所有匹配到的结果,这里假设 access_token 只有一个
# lis=jsonpath.jsonpath(res.json(), "$.access_token")
# TestApi.access_token=res.json()["access_token"]
# print(TestApi.access_token)
# 打印提取到的 access_token 的值,lis[0] 是因为 jsonpath 返回的是一个列表,我们需要取第一个元素
# print(lis[0])
#获取测试查询的接口
def test_select_flag(self):
urls= "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info"
datas= {
"access_token": TestApi.access_token
}
res= RequestsUtil02().send_all_reuqest(method="get",url=urls, params=datas)
# print(res.json())
#编辑便签的接口
def test_edit_flag(self):
urls="https://api.weixin.qq.com/cgi-bin/menu/create"
datas1={
"access_token": TestApi.access_token
}
data2={
"button":[
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"name":"菜单",
"sub_button":[
{
"type":"view",
"name":"搜索",
"url":"http://www.soso.com/"
},
{
"type":"view",
"name":"视频",
"url":"http://v.qq.com/"
},
{
"type":"click",
"name":"赞一下我们",
"key":"V1001_GOOD"
}
]
}
]
}
res=RequestsUtil02().send_all_reuqest(method="post",url=urls,json=data2,params=datas1)
# print(res.json())
if __name__ == '__main__':
TestApi().test_get_token()
TestApi().test_select_flag()
TestApi().test_edit_flag()
自动化测试的基础
自动化测试的介入点
到项目的中后期和维护期,自动化适合介入
三期:8个月
第一期:3个月
第二期:2.5个月
自动化迭代半个月-一个月
自动化测试和手工测试占比
- 小型项目:
在小型项目中,自动化测试的比例可能较低,大约占总测试工作量的
10% 到 30%
左右。这是因为在小型项目中,通常会有较少的功能和交互,因此自动化测试的需求相对较少。手工测试通常会占据较大的比例,用于验证基本功能和交互是否正常。
- 中型项目:
在中型项目中,自动化测试的比例可能会增加,大约占总测试工作量的 30% 到 50%。这是因为中型项目通常会涉及到更多的功能和交互,手工测试会变得更加耗时和繁琐。因此,团队会倾向于增加自动化测试的覆盖范围,以提高测试效率和稳定性。
- 大型项目:
在大型项目中,自动化测试的比例通常会进一步增加,占总测试工作量的 50% 到 80% 或更多。这是因为大型项目通常会涉及到复杂的功能和交互,手工测试可能无法满足测试需求。因此,团队会投入更多的资源和精力来建立和维护自动化测试框架,并加强自动化测试的覆盖范围。
自动化实施过程
1.可行性分析
2.框架选择(selenium,RF)
3.需求分析
4.制定计划
5.测试用例的设计(从功能测试收取)
6.环境搭建
7.版本控制
8.脚本维护
pytest元素定位
元素定位查找
1.元素是否加载完成
2.页面是否存在frame或者iframe
3.元素是否不可用或者不可读,不可见
是否是动态的元素,动态的DIV层,字定义组件
前提:元素唯一
元素定位的方式
通过 ID 定位
element = driver.find_element(By.ID, 'element_id')
通过 Name 定位
element = driver.find_element(By.NAME, 'element_name')
通过 Class Name 定位
element = driver.find_element(By.CLASS_NAME, 'element_class')
通过 Tag Name 定位
element = driver.find_element(By.TAG_NAME, 'element_tag')
通过 XPath 定位
element = driver.find_element(By.XPATH, '//div[@class="example"]')
通过 CSS Selector 定位
element = driver.find_element(By.CSS_SELECTOR, 'div.example')
通过 Link Text 定位(用于定位链接)
element = driver.find_element(By.LINK_TEXT, 'Link Text')
通过 Link Text 定位(用于定位链接)
element = driver.find_element(By.PARTIAL_LINK_TEXT, 'Partial Link Text')
案例分析
from selenium import webdriver
from selenium.webdriver.common.by import By
# 启动浏览器
driver = webdriver.Chrome()
# 打开商城网站
driver.get('http://example.com')
# 定位搜索框,并输入关键字
search_box = driver.find_element(By.ID, 'search-box')
search_box.send_keys('手机')
# 定位搜索按钮,并点击
search_button = driver.find_element(By.ID, 'search-button')
search_button.click()
# 定位搜索结果中的第一个商品,并点击进入商品详情页面
first_product = driver.find_element(By.CLASS_NAME, 'product-item')
first_product.click()
# 在商品详情页面,定位加入购物车按钮,并点击
add_to_cart_button = driver.find_element(By.XPATH, '//button[contains(text(), "Add to Cart")]')
add_to_cart_button.click()
# 定位购物车图标,并点击进入购物车页面
cart_icon = driver.find_element(By.CLASS_NAME, 'cart-icon')
cart_icon.click()
# 关闭浏览器
driver.quit()