自动化测试框架学习总结

本文总结了自动化测试框架ddt的使用,包括数据驱动测试的实现方式和注意事项,以及测试套的几种方法。ddt通过@data和@unpack装饰器管理测试数据,同时提到了unitTest discover在不同场景下的使用策略,特别是如何处理top_level_dir参数以避免运行错误。此外,文章还分享了如何在生成测试报告时避免文件名冲突的技巧,即在文件名中加入当前时间戳。
摘要由CSDN通过智能技术生成

ddt

import ddt
import unittest2
from func.csvFileManager2 import reader
from test_case.BaseTestCase import BaseTestCase


@ddt.ddt
class Register3Test(BaseTestCase):
    table = reader("register_test_cases.csv")
    
    @ddt.data(*table)
    def test_register(self, row):
        self.driver.get("http://172.31.14.251/index.php?m=user&c=public&a=reg")
        self.driver.find_element_by_name("username").send_keys(row[0])
        self.driver.find_element_by_name("password").send_keys(row[1])
        self.driver.find_element_by_name("userpassword2").send_keys(row[2])
        self.driver.find_element_by_name("mobile_phone").send_keys(row[3])
        self.driver.find_element_by_name("email").send_keys(row[4])
        print(self.table) # 不加星号,表示一个变量,就是列表本身,如:[1,2,3,4]
        print(*self.table) # 加上星号,表示4个变量,把列表中每个元素看成一个单独的变量,如:1 2 3 4

ddt 是第三方模块,需安装, pip install ddt
DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。
@data(a,b)
那么a和b各运行一次用例
@data([a,d],[c,d])
如果没有@unpack,那么[a,b]当成一个参数传入用例运行
如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递

import unittest
from ddt import ddt,data,unpack

@ddt
class MyTesting(unittest.TestCase):
    def setUp(self):
        print('this is the setUp')
    @data([1,2,3])
    def test_1(self,value):
        print(value)

    @data([3,2,1],[5,3,2],[10,4,6])
    @unpack
    def test_minus(self,a,b,expected):
        actual = int(a) - int(b)
        expected = int(expected)
        self.assertEqual(actual, expected)

    @data([2,3],[4,5])
    def test_compare(self,a,b):
        self.assertEqual(a,b)

    def tearDown(self):
        print('this is tearDown')

if __name__ == '__main__':
    unittest.main(verbosity=2)

测试套:

方法一:

discover=unittest.defaultTestLoader.discover(testdir,pattern=row[1])
runner=unittest.TextTestRunner()
runner.run(discover)

方法二:

suite=unittest.TestSuite()
suite.addTest(类名("方法名"))
runner=unittest.TextTestRunner()
runner.run(suite)
suite=unittest.TestSuite()
suite.addTests(类名1("方法名1","方法名2"),类名2("方法名1","方法名2"))
runner=unittest.TextTestRunner()
runner.run(suite)

方法三:

discover=unittest.defaultTestLoader.discover(脚本路径,pattern=文件名,top_level_dir=prj_path)
runner=HTMLTestRunner(stream=报告文件路径,title="XX测试报告",description="xx测试描述")
runner.run(discover)

unitTest中的 discover 第三个参数 top_level_dir 第一次运行时如果为None 会取当前传入的start_dir所在路径为 top_level_dir
而这个top_level_dir会作为self的参数保存下来,这样第二次运行时 top_level_dir实际取的是上一次的路径,直接影响到了下一次的运行
因此规避此问题的方法
1 要么在一次运行过程中只调用一次 discover
2 如果一定要调用两次,第二次需要手动将 top_level_dir这个参数传给discover方法,这样才能运行不同文件夹下的用例

生成报告文件名中可以加入当前时间,以防止覆盖
获取当前时间
now=time.strftime("%y_%m_%d %H-%M-%S")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值