0
点赞
收藏
分享

微信扫一扫

修改miniddt生成用例的名称

认真的老去 2022-04-29 阅读 20

项目场景:

使用@minium.ddt_case数据驱动测试


问题描述

在使用@minium.ddt_case的数据驱动时,生成的用例名称会把参数值全部拼接到用例名称后面,这样就导致,当参数过多时,用例名称会很长,有时候参数里面包含特殊字符串,甚至会导致无法生成测试报告,从而导致用例执行异常,下面是运行以下代码后生成的测试报告中显示的用例名称

from business_test.cases.base.basecase import BaseCase
from business_test.cases.pages import loginpage
from business_test.cases.base import router, accounts
import minium


@minium.ddt_class()
class LoginPageTest(BaseCase):

    def __init__(self, methodName='runTest'):
        super(LoginPageTest, self).__init__(methodName)
        self.loginPage = loginpage.LoginPage(self)

    @minium.ddt_case(
        (0, '登录失败-账号/密码错误', 'aiyumei', '200'),
        (1, '登录成功-账号:aiyumei', accounts.user, accounts.password)
    )
    def test_login(self, args):
        if self.app.current_page.path == router.loginPage:
            paths = [router.loginPage, router.homePage]
            self.loginPage.login(user=args[2], password=args[3])
            self.page.wait_for(3)
            self.assertEqual(paths[args[0]], self.mini.app.current_page.path, msg=args[1])
        elif self.app.current_page.path == router.homePage:
            pass

在这里插入图片描述


原因分析:

例如: 发送消息有两种方式,分别是 和 ,其中  方式当数据量过大时,由于  大小也有限,所以当  处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失。
发现返回的测试名称test_name将用例名称+参数的name+序号+传入参数的值


解决方案:

有两种解决方案

1、修改源码

test_name = name_fmt % {
    "testname": testname,
    "name": name,
    "index": index,
    "value": value,
}
该方法比较直接粗暴,将源码中
    test_name = name_fmt % {
        "testname": testname,
        "name": name,
        "index": index,
        "value": "",
    }

生成的用例名称如下图,只会在用例名称后加上序号,比较简短:
在这里插入图片描述
但是使用这种方式,测试用例名称中无法直观地看出该用例的测试目的

2、@miniun.ddt_class中testNameFormat参数设置格式化规则

使用minium.ddt_class修饰测试类时,带上testNameFormat参数设置格式化规则, 可配置项目包括:
%(index)s
%(value)s
%(name)s
其中 %(index)s 必须存在,不配置则默认加上。

一些例子:
下面的代码,先在@minium.ddt_class中配置testNameFormat=“%(name)s”,然后在用例修饰器@minium.ddt_case中添加minium.ddt_data方法,注意minium.ddt_data只能传两个参数,第一个是用例的传入参数,第二个就是@minium.ddt_class中配置testNameFormat的格式化规则(该例中为name)

from business_test.cases.base.basecase import BaseCase
from business_test.cases.pages import loginpage
from business_test.cases.base import router, accounts
import minium


@minium.ddt_class(testNameFormat="%(name)s")
class LoginPageTest(BaseCase):

    def __init__(self, methodName='runTest'):
        super(LoginPageTest, self).__init__(methodName)
        self.loginPage = loginpage.LoginPage(self)

    @minium.ddt_case(
        minium.ddt_data((0, '登录失败-账号/密码错误', 'aiyumei', '200'), name='登录失败'),
        minium.ddt_data((1, '登录成功-账号:aiyumei', accounts.user, accounts.password), name='登录成功')
    )
    def test_login(self, args):
        if self.app.current_page.path == router.loginPage:
            print('args的值为多少呢', args)
            paths = [router.loginPage, router.homePage]
            self.loginPage.login(user=args[2], password=args[3])
            self.page.wait_for(3)
            self.assertEqual(paths[args[0]], self.mini.app.current_page.path, msg=args[1])
        elif self.app.current_page.path == router.homePage:
            pass

运行后,查看测试报告中用例名称,如下图
在这里插入图片描述

举报

相关推荐

0 条评论