提示:python+selenium+allure+pytest webUI自动化文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
生命不息,奋斗不止,加油吧!
一、环境准备
1.python3.8
2.selenium4.3.0
3.allure(配置环境变量,cmd查看) 2.9
4.allure-pytest 2.9.2=25
二、问题总结
1.怎么都定位不到元素?
senenium的版本问题,最新版本的语法有所调整,建议下新版的
driver.find_element(By.ID, “password”) 新版本语法
driver.find_element_by_id( “password”)旧版语法
新版本的话开头引入如下
from selenium.webdriver.common.by import By
2.无法生成allure的html报告?
检查allure环境变量配置
系统–>高级系统设置–>环境变量–>系统变量–>path(allure的bin目录)
三、框架设计(待完善)
1.common:公共用例,比如登录
2.configs:配置文件,比如账号密码、测试环境
3.testcase:测试用例
4.run:执行入口
5.tools:测试方法,比如读写方法
四、代码设计
1.配置文件
测试账号、测试环境可以提前放在一个文件,方便读取
1.测试环境如下
current_env = "预发"
env_dict = {
"日常":"https://bip-daily.xxx.com/#/",
"预发":"https://bip-pre.xxx.com/#/",
"线上":"https://yonsuite.xxx.com/#/"
}
if __name__ == '__main__':
print(env_dict[current_env])
2.测试账号如下:
username = "188xxxxxxx
password = "123xxxxxxxx"
#日常
# username = "199xxxxxxxxxxx "
# password = "yonxxxxxxxxxxxxxx"
`
## 2.公共用例:登录
登录作为一个公共方法封装,放common目录下后期调用
```c
ifrom selenium import webdriver
from selenium.webdriver.common.by import By
from configs.env import env_dict,current_env
from configs.account import username,password
import time
class Driver:
def __init__(self): #初始化方法
self.driver = webdriver.Chrome()
#设置智能等待,最多等5秒
self.driver.implicitly_wait(5)
#最大化窗口
self.driver.maximize_window()
#访问到项目网址
self.driver.get(env_dict[current_env])
#登录
self.login()
def login(self):
global driver
self.driver.switch_to.frame("yonbip_login_id") # 切换frame
# 输入用户名
self.driver.find_element(By.ID, "username").send_keys(username)
# 输入密码
self.driver.find_element(By.ID, "password").send_keys(password)
# 点击登录
self.driver.find_element(By.ID, "submit_btn_login").click()
if __name__ == '__main__':
Driver()
3.测试用例:test_case01
1.测试用例以test开头、类以Test开头、函数以test开头
2.pytest会自动读取test开头的
import allure,pytest
from common.myDriver import Driver
from selenium.webdriver.common.by import By
import time
class Test_Org:
def test_crate_org(self):
with allure.step("打开浏览器,登录系统"):
#打开一个空白浏览器
my_driver = Driver()
#对当前屏幕截图.截图保存到report文件夹中
my_driver.driver.get_screenshot_as_file("./test_report/登录成功后进入的主页面.png")
#将上一步截图附加进测试报告
allure.attach.file("./test_report/登录成功后进入的主页面.png",attachment_type=allure.attachment_type.PNG)data = pd.read_csv(
4.执行用例:run.py
import allure,os,pytest
if __name__ == '__main__':
# pytest.main(['-sq','--alluredir','./test_result']) #-s输出打印信息,-q简化
# # 使用allure产生报告
# os.system("allure serve ../test_report")
result_dir = "./test_result"
report_dir = "./test_report"
pytest.main(["-sv", "--alluredir=%s" % result_dir, "--clean-alluredir", "test_Org.py"])
os.system("allure generate --clean %s -o %s" % (result_dir, report_dir))
ret = os.system("allure generate --clean %s -o %s" % (result_dir,report_dir))
if ret:
print('生成测试报告失败')
else:
print('生成测试报告成功')
总结
不定时更新