Selenium selenium suite 报错求助

安涛 · 2018年11月23日 · 最后由 安涛 回复于 2018年11月26日 · 2339 次阅读

求助:
在写自动化脚本时,在 case 中使用到 ddt 装饰器,然后在单独的 suite.py 界面创建 suite 套件添加测试用例,运行 suite 套件就报错:no such test method in : test_add。然后我把测试套件放到 case 页面里就没问题了。请问是什么问题?

# -*- coding:utf-8 -*-
'''
case:组织机构页面新增机构验证
'''
from selenium import webdriver
from function.page.login import Login
import unittest,time
import ddt
from function.page.xitongguanli.zuzhijg import Zzjg
from function.base.xls import excel
filename="C:\\Users\\11\\PycharmProjects\\new_core\\data\\zixunf.xlsx"
sheetName=u'机构代码'
excel_data=excel(filename)
testdata=excel_data.get_list(sheetName)
@ddt.ddt
class Zzjgcase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        # 登录
        user = ***
        password = ***
        cls.driver = webdriver.Firefox()
        cls.driver.maximize_window()
        cls.driver.implicitly_wait(5)
        cls.log = Login(cls.driver, user, password)
        cls.log.login()

    @classmethod
    def tearDownClass(cls):
        # cls.driver.close()
        pass
    def setUp(self):
        self.log.page_xtgl(u"系统管理", u"权限管理", u"组织机构")

    def tearDown(self):
        # self.driver.close()
        self.driver.find_element_by_xpath('//span[text()="首页"]').click()
        time.sleep(1)

    @ddt.data(*testdata)
    def test_add(self,data):
        zzjg=Zzjg(self.driver)
        print (u"场景:%s" % data[u'场景'])
        msg = zzjg.add(data[u'路径'], data[u'机构代码'], data[u'机构名称'], data[u'描述'])
        try:
            self.assertIn(data[u'预期结果'],msg,u"提示信息错误")
        except Exception as ee:
            print ee





# if __name__ =='__main__':
#     suite = unittest.TestLoader().loadTestsFromTestCase(Zzjgcase)
#     unittest.TextTestRunner(verbosity=2).run(suite)

def suite():
    suiteTest = unittest.TestSuite()
    suiteTest.addTest(Zzjgcase("test_add"))
    return suiteTest
if __name__ =='__main__':
    # unittest.main(defaultTest='suite')
    runner=unittest.TextTestRunner()
    runner.run(suite())
最佳回复

@ddt.data(*testdata) 这个装饰器,是会修改原始 test_add 函数的名字的,会变成 test_add_1_2 这种

共收到 7 条回复 时间 点赞

这个应该是 unittest 模块没有用好,和 Selenium 没有任何关系。
待我 debug 出来了,再继续回复。。。😈 😂 😂 😀

  1. unittest 框架不支持带参数的测试函数。
  2. 这个没有参数,也会报错吧。 建议写个不带参数的(暂时不考虑具体功能),试试是否可以测试通过。
t-bug 回复

好的,我去试试。

@ddt.data(*testdata) 这个装饰器,是会修改原始 test_add 函数的名字的,会变成 test_add_1_2 这种

YueChen 回复

是的,在 suite 中调用 case 时改成函数名为 “test_add_1/test_add_2...” 就 OK 了,非常感谢!👏 👏

安涛 回复
if __name__ == '__main__':
    CaseNames = unittest.TestLoader().getTestCaseNames(Zzjgcase)
    suiteTest = unittest.TestSuite()
    L = ['test_add', 'test_clear']  
    suiteTest.addTests([Zzjgcase("{0}".format(x)) for i in L for x in CaseNames if i == x[:len(i)]])
    runner = unittest.TextTestRunner()
    runner.run(suiteTest)

另外方法,可以尝试下

YueChen 回复

嗯嗯,这也正是我想做的,不用去根据每次用例数量不同而变动添加 case 数。

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