随笔记录方便自己和同路人查阅。
#------------------------------------------------我是可耻的分割线-------------------------------------------
学习selenium自动化之前,最好先学习HTML、CSS、JavaScript等知识,有助于理解定位及操作元素的原理。关于python和selenium安装请自行搜索别的资料,这里就不多做介绍了,所有例子均使用python3.6+selenium执行的。
#------------------------------------------------我是可耻的分割线-------------------------------------------
组织单元测试用例
当我们增加被测功能和相应的测试用例之后,再来看看unittest单元测试框架是如何扩展和组织新增的测试用例的。
新建文件calculator.py文件
#计算器 class Count(): def __init__(self,a,b): self.a = int(a) self.b = int(b) #计算加法 def add(self): return self.a + self.b # 计算减法 def add(self): return self.a - self.b
因为对计算器(calculator)又新增了减法功能(sub),所以需要针对新功能编写测试用例,扩展后的test.py文件如下。
import unittest from calculator import Count class TestAdd(unittest.TestCase): def setUp(self): print('test add start') def test_add(self): j = Count(2,3) self.assertEqual(j.add(),5) def test_add2(self): j = Count(10,5) self.assertEqual(j.add(),15) def tearDown(self): print('test add end') class TestSub(unittest.TestCase): def setUp(self): print('test sub start') def test_sub(self): j = Count(3, 2) self.assertEqual(j.sub(), 1) def test_sub2(self): j = Count(10,5) self.assertEqual(j.sub(), 5) def tearDown(self): print('test sub end') #执行测试类的测试方法 if __name__ == '__main__': #构造测试集 suite = unittest.TestSuite() suite.addTest(TestAdd("test_add")) suite.addTest(TestAdd("test_add2")) suite.addTest(TestSub("test_sub")) suite.addTest(TestSub("test_sub2")) #运行测试集合 runner = unittest.TextTestRunner() runner.run(suite)
上例中创建了TestAdd()和TestSub()两个测试类,分别测试calculator.py文件中的add()和sub()两个功能。通过TestSuite类的AddTest()方法把不同测试类中的测试方法组装到测试套件中,执行结果如下:
通过测试结果可以看到,setUp()和tearDown()方法分别作用于每个测试用例的开始与结束。如果每个类中的setUp()和tearDown()所做的事情时一样的,那是不是可以封装一个自己的测试类呢?
import unittest from calculator import Count class MyTest(unittest.TestCase): def setUp(self): print('test case start') def tearDown(self): print('test case end') class TestAdd(MyTest): def test_add(self): j = Count(2,3) self.assertEqual(j.add(),5) def test_add2(self): j = Count(10,5) self.assertEqual(j.add(),15) class TestSub(MyTest): def setUp(self): print('test sub start') def test_sub(self): j = Count(3, 2) self.assertEqual(j.sub(), 1) def test_sub2(self): j = Count(10,5) self.assertEqual(j.sub(), 5) def tearDown(self): print('test sub end') #执行测试类的测试方法 if __name__ == '__main__': unittest.main()
运行结果:
创建MyTest()类的好处显而易见,对于测试类和测试方法来说,应将注意力放在具体用例的编写上,无须关心setUp()和tearDown()所做的事情。不过,前提条件时setUp()和tearDown()所做的事情是每个用例都需要的。