强烈推荐python自动化学习网站–白月黑羽(http://www.byhy.net/tut/auto/selenium/01/)
我不是打广告, 是真的讲解的非常好!!!!网站文字内容+B站视频,涵盖了python自动化的几乎所有主要内容,见下图
另一个学习pytest的好习惯就是看它的 官方文档
https://docs.pytest.org/en/latest/how-to/usage.html#specifying-which-tests-to-run
另外,如果想要我手上的这个练习项目的,可以在底下评论,我发你
言归正传,首先看下pytest自动化是怎么设计的,也就是 目录结构是怎么样的,直接看图吧
debug.py是我在写用例的时候用来调试的代码的,可忽略
然后就是写代码啦,这里就不赘述了,直接贴代码了
模块一:写公共方法,这里全部以登录页面为例,这里只写了错误登录的方法,建议如果正常登录,另写一个登录成功的方法
"""
公共方法模块
lib.public_methods.py
"""
from selenium import webdriver
import time
def login(username, password):
"""页面登录, 返回错误信息"""
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get("http://localhost/admin.php")
if username is not None:
driver.find_element_by_xpath('//input[@name="username"][@id="username"]').send_keys(username)
if password is not None:
driver.find_element_by_css_selector('#password[name="password"]').send_keys(password)
driver.find_element_by_css_selector(".admin-btn").click()
time.sleep(3)
faults_text = []
fault_text = driver.find_element_by_css_selector('span#username_msg').text
faults_text.append(fault_text)
fault_text = driver.find_element_by_css_selector('span#password_msg').text
faults_text.append(fault_text)
driver.quit()
for fault_text in faults_text:
if fault_text != '':
return fault_text
模块二:写用例
"""
存放测试用例
cases/登录/test_错误登录.py
"""
from lib.public_methods import login
class Test_错误登录:
"""学啊网页面登录的测试用例"""
def test_001(self):
"""不输入登录账号,输入正确的密码"""
fault_text = login(username=None, password='admin')
assert fault_text == "帐号或密码不能为空"
def test_002(self):
"""输入正确的账号,不输入密码"""
fault_text = login(username='admin', password=None)
assert fault_text == "帐号或密码不能为空"
def test_003(self):
"""输入不正确的账号,输入正确的密码"""
fault_text = login(username='adminfljalsdfjlasdjflasjflasdjfla', password='admin')
print(fault_text)
assert fault_text == "密码错误"
模块二数据驱动
用方法装饰器 @pytest.mark.parametrize()
"""
存放测试用例---数据驱动
cases/登录/test_错误登录.py
"""
from lib.public_methods import login
import pytest
class Test_错误登录:
"""学啊网页面登录的测试用例"""
@pytest.mark.parametrize('username, password, fault_text', [(None, "admin", "帐号或密码不能为空"),
("admin", None, "帐号或密码不能为空"),
("admin1212", "admin", "密码错误")
]
)
def test_001_to_005(self, username, password, fault_text):
"""不输入登录账号,输入正确的密码"""
fault_text = login(username=username, password=password)
assert fault_text == fault_text
用例写完了,接下来 执行用例。和unittest框架不同,pytest好像不需要特意创建一个runner模块用来创建测试套件,直接在命令行执行就行
我在Windows系统上执行的,先输入cmd进入命令行,然后进入测试项目的根目录(我的根目录叫pytest),接下来输入命令 python -m pytest -s -v –html=login_report.html
简单解释一下这个命令:
python -m: 通过python执行.py文件
pytest: 执行pytest框架写的自动化用例(会自动找以test_开头的模块、Test_开头的类、test_开头的用例,也可以手动指定要执行的对象,详情不赘述)
-s: 显示代码中print的内容
-v: 显示执行的细节(不知道我这为啥没显示,,后续再研究)
–html=login_report.html:生成名字为login_report的HTML格式的测试报告
附上测试报告截图
Original: https://blog.csdn.net/weixin_43655830/article/details/117888426
Author: iiiisolation
Title: python pytest框架实现登录页面web自动化(UI自动化), API接口自动化思路也差不多
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/773042/
转载文章受原作者版权保护。转载请注明原作者出处!