-
unittest 是python 的单元测试框架, 在python 的官方文档中,对unittest有详细的介绍,想更深一步研究的同学可以到https://www.python.org/doc/ 去了解。
-
unittest 单元测试提供了创建测试用例,测试套件以及批量执行的方案, unittest 在安装pyhton 以后就直接自带了,直接import unittest 就可以使用。
-
作为单元测试的框架, unittest 也是可以对程序最小模块的一种敏捷化的测试。在自动化测试中,我们虽然不需要做白盒测试,但是必须需要知道所使用语言的单元测试框架。
-
利用单元测试框架,创建一个类,该类继承unittest的TestCase,这样可以把每个case看成是一个最小的单元, 由测试容器组织起来,到时候直接执行,同时引入测试报告.
-
敲好来个测试类, 继承unittest.TestCase
-
test1.py文件
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest
import time
import re
class TestBaiDu1(unittest.TestCase):
setUp用来初始化环境 每执行一个测试方法都会先执行这个方法
self表示这个类的实例
def setUp(self) -> None:
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30)
self.base_url = “http://www.baidu.com”
测试用例必须用test开头
def test_baiDuSearch(self):
driver = self.driver
driver.get(self.base_url + “/”)
driver.find_element_by_id(“kw”).click()
driver.find_element_by_id(“kw”).clear()
u表示字符编码
driver.find_element_by_id(“kw”).send_keys(u"测试")
driver.find_element_by_id(“su”).click()
driver.find_element_by_id(“su”).click()
def test_hao(self):
driver = self.driver
driver.get(self.base_url + “/”)
driver.find_element_by_link_text(“hao123”).click()
清除环境工作 每执行完一个测试用例都会执行这个
def tearDown(self) -> None:
time.sleep(3)
self.driver.close()
if name == “main”:
执行测试用例
unittest.main()
- test2.py文件
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re
class TestBaiDu2(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30)
self.base_url = “http://www.baidu.com”
def test_baiDuSearch(self):
driver = self.driver
driver.get(self.base_url + “/”)
driver.find_element_by_id(“kw”).click()
driver.find_element_by_id(“kw”).clear()
driver.find_element_by_id(“kw”).send_keys(u"詹姆斯")
driver.find_element_by_id(“su”).click()
driver.find_element_by_id(“su”).click()
def tearDown(self) -> None:
time.sleep(3)
self.driver.close()
if name == “main”:
unittest.main()
-
当有多个或者几百测试用例的时候, 这样就需要一个测试容器( 测试套件) ,把测试用例放在该容器中进行执行,unittest 模块中提供了TestSuite 类来生成测试套件,使用该类的构造函数可以生成一个测试套件的实例,该类提供了addTest来把每个测试用例加入到测试套件中。
-
AddTest.py文件
import unittest, csv
import test1, test2
import os, sys
import time
手工添加测试用例到套件
def createSuite():
初始化一个测试套件
suite = unittest.TestSuite()
将测试用例添加到测试套件中
suite.addTest(test1.TestBaiDu1(“test_baiDuSearch”))
suite.addTest(test1.TestBaiDu1(“test_hao”))
suite.addTest(test2.TestBaiDu2(“test_baiDuSearch”))
return suite
if name == “main”:
suite = createSuite()
2表示显示详细信息
runner = unittest.TextTestRunner(verbosity=2)
执行测试套件
runner.run(suite)
- 上述addTest有一个不方便的就是如果一个类有十几个甚至几十个测试用例, 如果每一次多add一次的话就太麻烦了, 所以就有makeSuite()和TestLoader()他们会自动加载你输入的类中的所有此时用例
makeSuite()
-
在unittest 框架中提供了makeSuite() 的方法,makeSuite可以实现把测试用例类内所有的测试case组成的测试套件TestSuite ,unittest 调用makeSuite的时候,只需要把测试类名称传入即可。
-
makeSuitTest.py文件
import unittest, csv
import os, sys
import time
import test1
import test2
手工添加案例到套件,
def createSuite():
suite = unittest.TestSuite()
将测试用例加入到测试容器(套件)中
suite.addTest(unittest.makeSuite(test1.TestBaiDu1))
suite.addTest(unittest.makeSuite(test2.TestBaiDu2))
return suite
if name == “main”:
suite = createSuite()
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
[外链图片转存中…(img-BSMar97p-1719237393469)]
[外链图片转存中…(img-z5W2u2ct-1719237393470)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!