Selenium [已解决] unittest 求助--如何使同一个 testcase 反复执行多次?

Donly · 发布于 2017年11月13日 · 最后由 mads 回复于 2017年11月16日 · 318 次阅读

场景:同一个用例,输入不同的数据,执行步骤和判断结果方式完全一致

只是数据不同,除了封装testcase时,手动多次加入该用例,有没有其他的办法实现该场景的??

ps:数据已实现从exxel中读入。

解决办法

引入python的ddt模块,并从excel中读取测试数据。(还没有研究过从json或yml文件中读取应该怎么做(其实是我还不懂这两种格式。。),不过我个人更偏爱excel)

import unittest
from ddt import data,ddt,file_data,unpack
...
@ddt
class UserManage(unittest.TestCase):
    global caseFlag,testdata    
    caseFlag = Params.caseFlag
    testdata =   method.ExcelTestDataInit_list(DATAFILE,"test_a_userAdd")

def setUp(self):
    print("UserManage Init!")
    self.driver = webdriver.Firefox()
.....
def tearDown(self):
    pass

@unittest.skipIf(caseFlag['test_a_userAdd']['SkipFlag'] == "skip", "用户设置跳过该用例")
@data(*testdata)
def test_a_userAdd(self,casedata):
    driver = self.driver
    caseName = method.get_curfunc_name()

    realname = casedata["realName"]
    department = casedata["department"]
    username = casedata["UserName"]

.......

其中,testdata读取出来后的内容为:
[{'UserName': 'autotest3', 'realName': '测试', 'department': '自动化测试部门'....},
{'UserName': 'autotest4', 'realName': '测试', 'department': '自动化测试部门'....}]
excel模样如下,可以自由控制数据量,从而控制用例执行次数:

共收到 13 条回复
D99fd3
Donly · #2 · 2017年11月13日 作者
765f22zhangjg0919 回复

第一次做自动化项目,ddt应该是指数据驱动吧?具体是要用什么其他的框架,还是怎么实现呢??多谢指教~~

765f22
D99fd3Donly 回复

DDT 就是数据驱动
自己搭框架啊 python + unittest + PO模式 + ddt 应该就满足你的问题了。
另外,我也是小白。目前我做的ui、接口测试就是用这种框架实现的。

6233

ddt 我不懂拉。。。 我只想问 你们写程序的时候 没学过什么是变量吗😂

E2277b

嘿嘿,也不知道你是不是这个意思,我的想法是将这个testcase作为一个公用的方法。然后在testcase中调用并且控制执行次数。
下面贴一小段code。献丑了 哈哈。

import unittest

def add(x):
    #读取数据,转化为数组、字典、矩阵等。
    a = [1, 2, 3, 4]
    b = [5, 6, 7, 8]

    #业务计算逻辑。
    return (a[x] + b[x])

class MyTest(unittest.TestCase):

    def setUp(self):
        print('setUp')

    def test_case_B(self):
        #可以返回数组长度作为循环停止的条件,视具体情况定。
        for x in range(0, 4):
            print(add(x))
        #用断言对返回的结果做判断。

    def tearDown(self):
        print('tear down')

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

执行结果如下:

setUp
6
8
10
12
tear down
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
[Finished in 0.1s]
D99fd3
Donly · #7 · 2017年11月14日 作者
765f22zhangjg0919 回复

ddt正解,刚好解决了我的问题。另外,多谢你的信息,让我了解到了PO模式,虽然我之前自己也有重新封装,但还没有PO封装的好,正好提升一下自己!

D99fd3
Donly · #8 · 2017年11月14日 作者
E2277bc19950809 回复

恩恩,多谢你啦!这种方法也是可以,只是有一个不好的地方,就是无法多次执行setup和teardown。且每当数据增加或减少一条,都要去修改代码哦。用python 的ddt模块,自动根据数据的条数,决定了执行的次数,更方便更灵活哈

D99fd3
Donly · #9 · 2017年11月14日 作者
6233dongdong 回复

那如果这个变量的值是不确定的呢??要怎么办呢?我也是昨天才了解了python的ddt模块,真的十分方便。数据量自己控制,不用每改变数据量就去修改代码。

D99fd3
Donly · #10 · 2017年11月14日 作者
5837taflo 回复

已使用,多谢!

95b64a

可以用参数化unittest框架 (ParametrizedTestCase),我之前也纠结,但现在已经完美解决,数据用的yml,你可以百度一下

D99fd3
Donly · #12 · 2017年11月14日 作者
95b64aDoraly-github 回复

恩,谢谢啦!

Db42eb
D99fd3Donly 回复

ddt可以啊

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册