美文网首页
使用yaml文件管理测试数据

使用yaml文件管理测试数据

作者: 日理万机_e6fa | 来源:发表于2020-04-22 20:47 被阅读0次

    知道ddt的基本使用方法之后,练习把之前用excel文件来维护的接口测试用例改用unittest+ddt来实现。

    这里我选用yaml文件来管理接口参数,开始本来想用json,但是json无法添加注释,可读性不好。

    下面截图是接口文档中的各个接口,每个接口都有一个固定的序号,所以在设计每个接口的测试数据时,以序号来区分不同接口

    yaml文件内容如下,需要注意的是yaml的语法:

    (1)键值对用冒号分割,但是冒号后需要加一个空格

    (2)禁止使用tab缩进,只能使用空格键;缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级

    (3)字符串可以不用引号标注,也可以加引号,如果想把数字变为字符串,加引号即可

    (4)使用#表示注释

    详情可以参考博客:https://blog.csdn.net/vincent_hbl/article/details/75411243

    2.简单demopython读取yaml文件,取出接口参数

    import yaml

    fp = open('../dataconfig/信息互动模块接口.yaml', encoding='utf-8')   #有中文字符的话,加编码格式

                    testdata = yaml.load(fp)

    t = testdata['5.2.1.4']

    print(t)

    (1)封装读取yaml文件方法

    handle_yaml.py

    # coding: utf-8

    # author: hmk

    importyaml

    importos

    classHandleYaml:

        def __init__(self,file_path=None):

            if file_path:

               self.file_path = file_path

            else:

                root_dir =os.path.dirname(os.path.abspath('.'))

                # os.path.abspath('.')表示获取当前文件所在目录;os.path.dirname表示获取文件所在父目录;所以整个就是项目的所在路径self.file_path = root_dir +'/dataconfig/信息互动模块接口.yaml'  #获取文件所在的相对路径(相对整个项目)

            #elf.data = self.get_data()

        def get_data(self):

            fp =open(self.file_path, encoding='utf-8')

            data =yaml.load(fp)

            return data

    if __name__ == '__main__':

        test = HandleYaml()

        p = test.get_data()

        print(p['5.2.1.1'])

    [if !vml][endif]

    (2)封装requests请求方法

    [if !vml][endif]

    # coding: utf-8

    # author: Archer

    importrequests

    importjson

    classRunMethod:

        defpost_main(self, url, data, header=None):if header is notNone:

                 res =requests.post(url=url, data=data, headers=header)

            else:

                res =requests.post(url=url, data=data)

            # print(res.status_code)

            # return res.json()

            return res    #为了方便后面断言,这里不再对服务器响应进行json格式编码

    def get_main(self, url, data=None, header=None):if header is notNone:

                res =requests.get(url=url, params=data, headers=header)

            else:

                res =requests.get(url=url, params=data)

                print(res.status_code)

            # return

    res.json()

            return res

        def run_main(self, method, url, data=None, header=None):

        if method== 'POST':

                res =self.post_main(url, data, header)

            else:

                res =self.get_main(url, data, header)

            returnres

            # returnjson.dumps(res, indent=2, sort_keys=False, ensure_ascii=False)  #使用json模块格式化显示结果

    [if !vml][endif]

    (3)一个接口测试用例

    [if !vml][endif]

    # coding: utf-8

    # author: Archer

    importunittest

    importddt

    from base.run_method importRunMethod

    from utils.handle_yaml importHandleYaml

    get_data = HandleYaml()  # 从yaml文件中取出该接口的参数

    params = get_data.get_data()['5.2.1.4']

    @ddt.ddt

    classTest(unittest.TestCase):

        """加载咨询详情接口"""

        defsetUp(self):

            self.url ='http://localhost:8088/ApprExclusiveInterface/api/enterprise/info/consult/loadDetail.v'

            self.run =RunMethod()

        @ddt.data(*params)

        deftest(self, value):

            r =self.run.run_main("GET", self.url, value)

            print(r)

           self.assertTrue(value['assert'] inr.text)

    if __name__ == '__main__':

        unittest.main()

    (4)利用HTMLTestRunner生成测试报告

    run_report.py

    # coding: utf-8

    # author: hmk

    from HTMLTestRunner importHTMLTestRunner

    importunittest

    importtime, os

    root_dir = os.path.dirname(os.path.abspath('.'))  # 获取当前文件所在目录的父目录的绝对路径,也就是项目所在路径E:\DDT_Interface

    case_dir = root_dir + '/test_case/'  # 根据项目所在路径,找到用例所在的相对项目的路径

    print(root_dir)

    print(case_dir)

    """定义discover方法"""

    discover = unittest.defaultTestLoader.discover(case_dir,

    pattern='test*.py', top_level_dir=None)

    """

    1.case_dir即测试用例所在目录

    2.pattern='test_*.py' :表示用例文件名的匹配原则,“*”表示任意多个字符

    3.top_level_dir=None:测试模块的顶层目录。如果没顶层目录(也就是说测试用例不是放在多级目录中),默认为None

    """

    if __name__ == "__main__":

        """直接加载discover"""

        now = time.strftime("%Y-%m-%d%H_%M_%S")

        filename = root_dir +'/report/' + now + '_result.html'  #定义报告存放路径

        print(filename)

        fp = open(filename,'wb')

        runner =HTMLTestRunner(stream=fp, title='个人网企业网接口测试报告', description='测试结果如下: ')

        runner.run(discover)

        fp.close()

    ok ,unittest+ddt进行接口测试就完成了,还有很多不足,yaml配置文件还可以继续设计优化,例如可以把请求url也加进去。

    其实感觉如何设计测试用例,组织测试数据也是一件很有意思的事情,很多事情都必须先有一个良好的设计思路才会进行的更顺畅。总之勤于思考,多参考他人的思路。不是有句话吗,学而不思则罔,思而不学则殆。

    相关文章

      网友评论

          本文标题:使用yaml文件管理测试数据

          本文链接:https://www.haomeiwen.com/subject/supemxtx.html