Unittest测试框架
前面陆续介绍了selenium自动化的基本使用,假设前面每篇的示例都是一个case,那么我们已经有很多自动化用例了,这么多的用例我们怎么去管理和测试执行呢?这里就需要引入一个框架unittest,unittest是一个单元测试框架,是Python编程的单元测试框架,要了解unittest单元测试框架,先来了解以下几个重要的概念。
测试固件(test fixture)
测试固件包括两部分setUp()和tearDown(),执行测试代码之前的预置条件准备和测试结束之后的清理。
测试用例(test case)
unittest中管理的最小单元是测试用例,一个测试用例,包括测试固件,和具体测试业务的函数或者方法。测试用例中必须有以test开头的函数,unittest会自动化识别test开头的函数是测试代码,如果函数不是test开头,unittest不会执行这个函数里面的脚本。
测试套件 (test suite)
很多测试用例的集合,叫测试套件,一个测试套件可以随意管理多个测试用例。
测试执行器 (test runner)
test runner用来执行加载测试用例,并执行用例,提供测试输出,test runner可以加载test case或者test suite进行执行测试任务。
邮箱登陆手动测试的case步骤:
预置条件:
1.使用浏览器:firefox 45
2.打开邮箱登陆页面
操作步骤:
1.输入正确的账号、密码;
2.点击登陆按钮登陆邮箱
预期结果:
成功登陆邮箱。
这个用例手动测试很简单,但是自动化代码如何判断是否登陆成功呢?我们可以这样实现:
登陆成功后,会进入邮箱首页,如上图所示若当前窗口页面出现该元素我们认为登陆成功。
# coding:utf-8 # 邮箱登陆 from selenium import webdriver driver = webdriver.Firefox() driver.maximize_window() driver.implicitly_wait(10) driver.get("http://mail.163.com/") # 输入正确的账号密码登陆邮箱 driver.switch_to.frame("x-URS-iframe") driver.find_element_by_name("email").send_keys("yunqishi") driver.find_element_by_name("password").send_keys("12345678") driver.find_element_by_xpath(".//*[@id='dologin']").click() mailName = driver.find_element_by_id("spnUid").text # 判断是否登陆成功 if mailName == u"yunqishi@163.com": print (u"登录成功") else: print (u"登录失败") driver.quit()
引入unittest后代码该如何写?我们将上面的代码重写看看:
# coding=utf-8 from selenium import webdriver import time import unittest class Login(unittest.TestCase): def setUp(self): # 测试固件的setUp()的代码,主要是测试预置条件,打开浏览器和站点 self.driver = webdriver.Firefox() self.driver.maximize_window() self.driver.implicitly_wait(8) self.driver.get("http://mail.163.com/") def tearDown(self): # 测试结束后的操作,关闭浏览器 self.driver.quit() def test_mail_login(self): # 邮箱登陆 必须test开头,把测试逻辑代码封装到以test开头的方法里。 self.driver.switch_to.frame("x-URS-iframe") self.driver.find_element_by_name("email").send_keys("yunqishi") self.driver.find_element_by_name("password").send_keys("12345678") self.driver.find_element_by_xpath(".//*[@id='dologin']").click() time.sleep(10) # 断言,判断是否登陆成功 mailName = "yunqishi@163.com" mailName1 = self.driver.find_element_by_id("spnUid").text self.assertEqual(mailName1, mailName) if __name__ == '__main__': unittest.main()
引入unittest后代码结构解读可以这里看看虫师大神的文章解读:
http://www.cnblogs.com/fnng/p/3300788.html