假设要进行百度首页功能的验证,测试用例必然不止一个,如何更加方便的组织和执行多个用例,如何方便的判断测试用例执行结果?unittest测试框架为我们提供了很多支持。先来个简单的例子吧。
测试脚本的主要内容:在百度首页中,点击【新闻】超链接,验证打开的网页是否为百度新闻页面。
一个简单的例子
import unittest
import time
from selenium import webdriver
class testBaidu(unittest.TestCase):
def test_news(self):
self.driver=webdriver.Chrome()
self.url=r"http://www.baidu.com"
self.driver.get(self.url)
time.sleep(3)
self.driver.find_element_by_link_text("新闻").click()
time.sleep(3)
self.assertEqual(self.driver.current_url,r"http://news.baidu.com/")
self.driver.quit()
if __name__=="__main__":
unittest.main()
脚本说明
1、导入unittest模块
2、新建测试类testBaidu,最最重要的是要继承unittest.TestCase
3、新建测试方法,名称要以test开头,如本例子中的test_news,一个方法类似于一个测试用例。
4、测试方法中,模拟打开网页和点击链接的操作。
5、测试方法中,使用unittest提供的assertEqual断言方法进行结果判断,当该方法中的两个参数值相等时,则结果为成功。比如本例子中,判断self.driver.current_url即获取到的当前网页的网址,是否与目标网址r"http://news.baidu.com/"一致。
6、添加unittest.main()方法,当脚本执行时,这个方法会自动查找所有以test开头的方法来执行。
执行结果
1、按照上面的例子,本次测试是通过的,assertEqual中判断当前网页的url与我们期望的url一致。python中显示的结果如下:
上面显示执行了1个test,执行结果为OK,即成功的。
2、我们将脚本中的assertEqual语句修改一下,修改为
self.assertEqual(self.driver.current_url,r"http://aaa.baidu.com/")
再次执行测试脚本。python中显示的结果如下:
显示执行了1个test,执行结果为Failed,即失败的。结果上方还显示了失败的具体原因为AssertError。
unittest组织多个测试用例
下面的例子是测试百度首页中的【新闻】和【hao123】两个超链接,是否能打开相对应的网页。脚本:
import unittest
import time
from selenium import webdriver
class testBaidu(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome()
self.url=r"http://www.baidu.com"
def test_news(self):
self.driver.get(self.url)
self.driver.find_element_by_link_text("新闻").click()
time.sleep(3)
self.assertEqual(self.driver.current_url,r"http://news.baidu.com/")
def test_hao123(self):
self.driver.get(self.url)
self.driver.find_element_by_link_text("hao123").click()
time.sleep(3)
self.assertEqual(self.driver.current_url,r"https://www.hao123.com/")
def tearDown(self):
self.driver.quit()
if __name__=="__main__":
unittest.main()
脚本说明一下与上面的例子中有区别的地方:
1、本例子中要执行两次测试,一个是打开百度新闻网页,另一个是打开hao123网页,所以新增了test_hao123方法。
2、使用了unittest框架中的setUp和tearDown方法,用于定义测试用例的前置和后置动作。例如本脚本中,将启动浏览器作为前置动作,将关闭浏览器作为后置动作。而test_news和test_hao123中不再有启动和关闭浏览器的语句。
3、当unittest.main()执行时,各语句的执行顺序为
1)setUp前置语句
2)test_hao123测试
3)tearDown()后置语句
4)setUp前置语句
5)test_news测试
6)tearDown()后置语句
即对于每个测试用例执行时,前置语句和后置语句都会执行一遍。请在执行时仔细观察是否是这样。
4、python中执行结果的显示:
5、有个奇怪的地方,为啥明明test_news在前,test_hao123在后,而测试执行顺序却是先执行的test_hao123呢?因为unittest.main()执行是按照测试方法的名称来排序的,不是语句的先后顺序。如果想要自己控制测试执行的先后顺序,下个章节会有方法解决。