Python+Selenium+Unittest+HTMLTestRunner线性自动化框架实战详细教程

大部分公司项目管理工具都为禅道,此篇以禅道登录进行举例

一、创建包和目录

1、common:存放公共方法,如测试执行前的操作(打开浏览器)、测试执行后的操作(关闭浏览器)、登录等

2、config:一般用于存放ini配置文件

3、report:用于存放HTML测试报告

4、test_cases:测试用例目录

5、run_all.py:用于执行所有测试用例的文件

Python+Selenium+Unittest+HTMLTestRunner线性自动化框架实战详细教程_第1张图片

 二、各目录的编写方法

1、首先编写单独的测试用例,确定单独模块可执行成功

定位识别语法可参考作者主页历史文章:https://blog.csdn.net/healerlx/category_11438512.html?spm=1001.2014.3001.5482

Python+Selenium+Unittest+HTMLTestRunner线性自动化框架实战详细教程_第2张图片

import unittest
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

class test_Login(unittest.TestCase):

    def setUp(self) -> None:#测试前要执行的内容
        self.driver = webdriver.Chrome() #打开浏览器
        self.driver.implicitly_wait(10) #隐式等待10S
        self.driver.maximize_window() #窗口最大化
        self.driver.get('禅道URL')#禅道地址

    def tearDown(self) -> None:#测试后要执行的内容
        time.sleep(3)
        self.driver.quit()#退出览器

    def test_login_succes(self):
        self.driver.find_element(By.ID,'account').send_keys('XXX') #禅道登录用户名
        self.driver.find_element(By.NAME,'password').send_keys('XXX')#禅道登录密码
        self.driver.find_element(By.CLASS_NAME,'btn.btn-primary').click()#点击登录按钮

if __name__ == '__main__':
    unittest.main()

Python+Selenium+Unittest+HTMLTestRunner线性自动化框架实战详细教程_第3张图片

 2、执行某个目录下的测试用例(当test_case中有多个文件夹或模块时,执行该文件夹下的所有用例)

详细写法可参考文章Python+Unittest - discover()构建不同目录下的用例_HealerLX的博客-CSDN博客

import os
import unittest

current_path = os.path.dirname(__file__)  # 获取当前目录
cases_path = os.path.join(current_path, 'test_cases')  # 拼接文件路径

#执行以下路径的所有测试用例
discover = unittest.defaultTestLoader.discover(start_dir=cases_path, pattern='test_*.py', top_level_dir=cases_path)

if __name__ == '__main__':
    main_suite = unittest.TestSuite()  # 创建测试套件对象
    main_suite.addTest(discover)  # 执行discover对象中的所有文件
    unittest.main(defaultTest='main_suite')



3、引用HTMLTestRunner将执行结果以网页测试报告形式展示,html文件写入指定目录中

import os
import time
import unittest
import HTMLTestRunner

current_path = os.path.dirname(__file__)
report_path = os.path.join(current_path,'report')
cases_path = os.path.join(current_path,'test_cases')
#测试报告命名以年月日时分秒的格式
html_path = os.path.join(report_path,'report_%s.html'%time.strftime('%Y_%m_%d_%H_%M_%S'))

discover = unittest.defaultTestLoader.discover(start_dir=cases_path,pattern='test_*.py',top_level_dir=cases_path)

main_suite = unittest.TestSuite()
main_suite.addTest(discover)


with open(html_path,'w',encoding='UTF-8') as file:
    html_runner = HTMLTestRunner.HTMLTestRunner(stream=file,title='禅道UI自动化测试项目',description='丸子编码')
    html_runner.run(main_suite)

Python+Selenium+Unittest+HTMLTestRunner线性自动化框架实战详细教程_第4张图片

 4、将公共方法写入common文件夹,测试用例模块直接引用,再执行run_all.py文件即可

Python+Selenium+Unittest+HTMLTestRunner线性自动化框架实战详细教程_第5张图片

from selenium import webdriver

def set_driver():
        driver = webdriver.Chrome()
        driver.implicitly_wait(10)
        driver.get('浏览器URL')
        driver.maximize_window()
        return driver

 ​Python+Selenium+Unittest+HTMLTestRunner线性自动化框架实战详细教程_第6张图片

import unittest
import time
from common import set_driver
from selenium.webdriver.common.by import By

class test_Login(unittest.TestCase):

    def setUp(self) -> None:
        self.driver = set_driver.set_driver()

    def tearDown(self) -> None:
        time.sleep(3)
        self.driver.quit()

    def test_login_succes(self):
        self.driver.find_element(By.ID,'account').send_keys('test01')
        self.driver.find_element(By.NAME,'password').send_keys('newdream123')
        self.driver.find_element(By.CLASS_NAME,'btn.btn-primary').click()

if __name__ == '__main__':
    unittest.main()

你可能感兴趣的:(Python,selenium,python,selenium,自动化,ui)