本教程是在上一篇基础上的拓展。
https://blog.csdn.net/weixin_42801714/article/details/116166754
使用@classmethod装饰器能够实现不同testcase运行时只开一次浏览器,但是对于整个class参数化的情况,依然会在每次传入一次case时打开一次浏览器。重写__init__可以实现在程序运行全过程只打开一次浏览器。
具体实现代码如下:
# -*- coding: utf-8 -*-
# @FileName: config.py
from selenium import webdriver
driver_type = webdriver.Chrome
driver = None
web_url = "https://www.baidu.com"
# -*- coding: utf-8 -*-
# @FileName: webtest_fx.py
import unittest
import paramunittest
import config
import atexit
import time
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
case = [('unittest', 'unittest1'), ('parametrized', 'parametrized2'), ('selenium', 'selenium3')]
def quit_driver():
if config.driver:
print("Close chrome......")
config.driver.quit()
@paramunittest.parametrized(*case)
class BaiDu(unittest.TestCase):
def __init__(self, methodName='runTest'):
unittest.TestCase.__init__(self, methodName)
if not config.driver:
# 初始化:打开浏览器
config.driver = config.driver_type()
print("Open chrome......")
atexit.register(quit_driver) # 程序结束时执行
@property
def driver(self):
return config.driver
def setParameters(self, input1, input2):
self.input1 = input1
self.input2 = input2
def test_search(self):
driver = self.driver
self._testMethodDoc = self.input1 # 设置用例名称
driver.get('https://www.baidu.com')
driver.find_element_by_xpath("//*[@id='kw']").send_keys(self.input1)
WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='su']")))
driver.find_element_by_xpath("//*[@id='su']").click()
time.sleep(1)
self.assertEqual(self.driver.title, self.input1+"_百度搜索")
def test_search2(self):
driver = self.driver
self._testMethodDoc = self.input2
driver.get('https://www.baidu.com')
driver.find_element_by_xpath("//*[@id='kw']").send_keys(self.input2)
WebDriverWait(driver, 2).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='su']")))
driver.find_element_by_xpath("//*[@id='su']").click()
time.sleep(1)
self.assertEqual(self.driver.title, self.input2+"_百度搜索")
if __name__ == '__main__':
unittest.main(verbosity=2)
# -*- coding: utf-8 -*-
# @FileName: report.py
# 运行report进行测试并生成报告
import unittest
import HTMLTestReportEN
if __name__ == '__main__':
discover = unittest.defaultTestLoader.discover(start_dir='./', pattern="webtest.py")
fp = open('./TestReport.html', 'wb')
runner = HTMLTestReportEN.HTMLTestRunner(stream=fp, title='Web test', description='Test in BaiDu.',tester="vegetable000", verbosity=2)
runner.run(discover)
fp.close()
最终报告: