''' 时间:2018/12/05 功能:单元测试/unittest/禅道测试 目录: 一: 单元测试 1 测试代码 二: unittest 1 执行流程 2 断言使用 3 __main__ 三: 禅道测试 1 普通测试 2 unittest 四: 未解决
五: 思考 '''
一: 单元测试
1 测试代码
def add(a, b): c = a + 2 * b return c if __name__ == "__main__": d = add(2, 2) print(d)
二: unittest
1 执行流程
# coding:utf-8 import unittest class A8(unittest.TestCase): def setUp(self): print("setUp") def tearDown(self): print("tearDown") @classmethod def setUpClass(cls): print("setUpClass") @classmethod def tearDownClass(cls): print("tearDownClass") def testAdd(self): # test method names begin with 'test' print("testAdd") self.assertEqual((1 + 2), 3) self.assertEqual(0 + 1, 1) def testMultiply(self): print("testMultiply") self.assertEqual((0 * 10), 0) self.assertEqual((5 * 8), 40) def testAsd(self): print("testAsd") self.assertEqual((1 + 1), 2) self.assertEqual((1 + 1), 2) if __name__ == '__main__': unittest.main()
Testing started at 18:13 ...
setUpClass
setUp
testAdd
tearDown
setUp
testAsd
tearDown
setUp
testMultiply
tearDown
tearDownClass
每次用例 - 最先执行: def setUp(self): 每次用例 - 最后执行: def tearDown(self): 所有用例 - 最先执行一次: def setUpClass(cls): 所有用例 - 最后执行一次: def tearDownClass(cls): class和用例执行顺序排序: 大写字符(A-Z),小写字母(a-z), 数字(0-9)
2 断言使用
常用断言 assertTrue 条件为真 assertFalse 条件为假 assertEqual 数字相同 assertNotEqual 数字不同 assertIn 字符串 - 包含 assertNotIn 字符串 - 不包含 self.assertIsNone(x) #判断为空 self.assertIsNotNone(x) #判断不为空 所有的测试结果判断,都可以用True和False来判断。
3 __main__
(1) 没有 - if __name__ == "__main__":
def add(a, b): c = a + 2 * b return c d = add(2, 2) print(d)
1 : 保存为: t001_test_unittest.py
import t001_test_unittest a = t001_test_unittest.add(4, 4) print(a) print(t001_test_unittest.__name__)
1 : 保存为: t002_test_main.py
2 : 执行t002_test_main.py
4
12
t001_test_unittest
(2) 使用 - if __name__ == "__main__":
def add(a, b): c = a + 2 * b return c if __name__ == "__main__": d = add(2, 1) print(d)
1 : 保存为: t001_test_unittest.py
import t001_test_unittest a = t001_test_unittest.add(4, 4) print(a) print(t001_test_unittest.__name__)
1 : 保存为: t002_test_main.py
2 : 执行t002_test_main.py
12
t001_test_unittest
三: 禅道测试
1 普通测试
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("http://127.0.0.1/zentao") time.sleep(1) # 登录禅道 driver.find_element_by_id("account").send_keys("admin") driver.find_element_by_name("password").send_keys("1234567") driver.find_element_by_id("keepLoginon").click() driver.find_element_by_id("submit").click() time.sleep(1) # 判断登录 try: text = driver.find_element_by_css_selector("#userMenu>a").text print("登录成功") except: print("登录失败") # 退出程序 driver.quit()
2 unittest
# coding:utf-8 from selenium import webdriver import time import unittest class LoginTest(unittest.TestCase): '''登录类的案例''' @classmethod def setUpClass(cls): cls.driver = webdriver.Firefox() @classmethod def tearDownClass(cls): cls.driver.quit() # 编辑器问题 def setUp(self): self.driver.get("http://127.0.0.1/zentao/user-login-L3plbnRhby8=.html") def tearDown(self): self.is_alert_exist() self.driver.delete_all_cookies() # 退出登录 self.driver.refresh() def get_login_username(self): try: t = self.driver.find_element_by_css_selector("#userMenu>a").text print(t) return t except: return "" def is_alert_exist(self): '''判断alert是不是在''' try: time.sleep(2) alert = self.driver.switch_to.alert text = alert.text alert.accept() # 用alert 点alert return text except: return "" def test_01(self): '''登录成功的案例''' time.sleep(2) self.driver.find_element_by_id("account").send_keys("admin") self.driver.find_element_by_name("password").send_keys("123456") self.driver.find_element_by_id("submit").click() # 判断是否登陆成功 time.sleep(3) t = self.get_login_username() print("获取的结果:%s"%t) self.assertTrue("admin" == t) def test_02(self): '''登录失败的案例''' time.sleep(2) # 错误账号和密码 self.driver.find_element_by_id("account").send_keys("admin1112") self.driver.find_element_by_name("password").send_keys("") self.driver.find_element_by_id("submit").click() # 判断是否登陆成功 time.sleep(3) t = self.get_login_username() print("登录失败,获取结果:%s"%t) self.assertTrue("" == t) # 断言失败截图 if __name__ == "__main__": unittest.main()
四: 未解决
禅道登录失败情况,获取错误信息失败。
from selenium import webdriver import time driver = webdriver.Firefox() driver.get("http://127.0.0.1/zentao") time.sleep(1) # 登录禅道 driver.find_element_by_id("account").send_keys("admin") driver.find_element_by_name("password").send_keys("1234567") driver.find_element_by_id("keepLoginon").click() driver.find_element_by_id("submit").click() time.sleep(1) # 判断登录 try: text = driver.find_element_by_css_selector("#userMenu>a").text print("登录成功") except: print("登录失败") a = driver.switch_to.alert print(a.text) # 打印文本 a.accept() # 点击确定 # 退出程序 driver.quit()
五: 思考
返回数据
返回原则:越简单越好,越简单越容易判断。
返回内容: 空值、True、False、词语、等等。