我们在自动化测试的时候,有没有遇到这样的问题?例如一个登录的接口要做自动化,会有很多case(用例),密码错误,密码正确这种。在继承unittest.TestCase的类中,凡是以“test”开头的方法都会被看作成一个case。那么基于这个机制,一个登录的接口,我们是不是要写很多以“test”开头的方法,testlogin1(),testlogin2(),testlogin3().很显然这种写完是不行的,代码不能复用,代码量大,且逻辑代码和数据没能区分出来不利于管理。那么我们需要用到数据驱动这个方法来加入到我们的自动化中。
1.首先的安装“request”、“ddt”、“xlrd”、“unittest”模块。这几个模块我前面的博客有介绍的,可以看一下。
2.然后我们分别用@ddt.ddt、@ddt.data、@ddt.unpack装饰我们得到类、数据、方法。
3.@ddt.data()的数据就可以参数化了,可以从表格里面取。
import unittest import ddt from Login import Login import HTMLTestRunner @ddt.ddt class PraddtTest(unittest.TestCase): def setUp(self): print("my test start!") def tearDown(self): print("my test complete!") @ddt.data(["admin", "1qaz", "OK"], ["admin", "", "ERROR"], ["", "1qaz", "ERROR"], ["admin", "1234", "ERROR"], ["Admin", "1qaz", "ERROR"]) @ddt.unpack def test_ddt(self, user, passwd, expect_value): Login1=Login() result = Login1.login(user, passwd) print(result) self.assertEqual(result, expect_value, msg=result) if __name__=="__main__": with open('F:\temp.html', 'wb') as fp: stiue = unittest.TestLoader().loadTestsFromTestCase(PraddtTest) runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title="1", description="2") runner.run(stiue)