集成unittest原因
- 原来的demoxxxx.py使用瀑布模型(线性模式)进行代码编写,复用性差、代码冗余、维护成本较高
unittest
- 是Python语言自带的单元测试框架,做功能自动化和接口测试时也都可以使用这样的框架来管理代码
- unittest的主要作用有
- 更方便管理测试用例实现代码
- 提供了大量的断言方法,可以帮助我们快速检查界面上生成的数据或控件状态
- 有丰富的日志,有利于代码的调试
- 批量运行
- 测试结果报告清晰明了
selenium集成unittest框架步骤:
-
新建测试模块代码文件:选择Python unittest类型
-
新建setUp和tearDown的方法
- setUp做测试准备工作,比如启动浏览器,设置隐式等待超时时间等
- tearDown做测试收尾工作,比如关闭浏览器等
- 注意:为了让driver变量在整个类里所有方法中都可以使用,需要在变量名前加self,变成self.driver的写法
-
新建test开头的测试方法
- 一个类里可以有一到多个测试方法,主要实现业务操作步骤和断言
- 也需要使用self.driver的写法访问成员变量
"""
用例1
ECsho前台首页
不输入关键字,点击搜索,等待4秒
切换到弹出的消息框,点击确定
用例2
ECsho前台首页
输入关键字"hello",点击搜索,等待4秒
"""
import unittest
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
class MyTestCase(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Firfox() # 启动浏览器
self.driver.implicitly_wait(15) # 隐式等待
def tearDown(self) -> None:
self.driver.quit() # 关闭浏览器
def test_01(self):
self.driver.get("http://localhost/upload/index.php")
# self.driver.find_element(By.ID,'keyword')
self.driver.find_element(By.NAME, 'imageField').click()
sleep(4)
a2 = self.driver.switch_to.alert # 切换消息框
t2 = a2.text
print(t2)
a2.accept() # 点击 确定 关闭
sleep(2)
def test_02(self):
self.driver.get("http://localhost/upload/index.php")
self.driver.find_element(By.ID,'keyword').send_keys("hello")
self.driver.find_element(By.NAME, 'imageField').click()
sleep(4)
if __name__ == '__main__':
unittest.main()
集成训练
集成案例优化
- 合并测试方法、提取测试数据到外部文件
- 准备一个数据文件search_file_8007.csv,存储三组测试数据
- 把三个测试方法test_search_01、test_search_02、test_search_03合并为一个测试方法test_search,读取csv文件里的测试数据,判断测试数据是什么情况的测试数据,做不同的操作。