• 接口自动化测试思路和实战(4):数据驱动测试框架


    目录

    数据驱动测试框架

    步骤1、在项目根目录下新建conf文件夹,在下面新建config.ini文件

    步骤2、在common的py文件夹下新建ini_file_utils.py文件

    步骤3,重写local_config.py文件,封装读取ini文件中的值

    步骤4、修改common_function.py文件,把获取的token值放到ini文件中

    步骤5、修改run_api_tests.py文件,先把 token值写入ini文件中

    步骤6、修改用例层的代码和获取token的py文件

    步骤7、执行run_api_tests.py文件,查看执行结果;


    数据驱动测试框架

      在这里测试的输入和输出数据是从数据文件中读取(数据池,ODBC源,CSV文件,EXCEL文件,Json文件,Yaml文件,ADO对象等)并且通过捕获工具生成或者手工生成的代码脚本被载入到变量中。在这个框架中,变量不仅被用来存放输入值还被用来存放输出的验证值。整个程序中,测试脚本来读取数值文件,记载测试状态和信息。这类似于表驱动测试,在表驱动测试中,它的测试用例是包含在数据文件而不是在脚本中,对于数据而言,脚本仅仅是一个“驱动器”,或者是一个传送机构。

    通俗化一点:就是把测试过程中用到的测试数据和代码进行分开编写,分开存放。

    比如:测试token接口用到的数据appid-sercet以及期望结果都提前放入一个数据文件

    举例:项目中的access_token是一个公共需求的测试数据,它生成一次有效期是7200秒,2个小时一般都能执行完所有的接口测试了.

    实现一次性获取 token值,保存到文件中,后续使用文件中的 token值完成测试。

    步骤1、在项目根目录下新建conf文件夹,在下面新建config.ini文件

    步骤2、在common的py文件夹下新建ini_file_utils.py文件

     编写代码:

    1. # encoding: utf-8
    2. # @author: Jeffrey
    3. # @file: ini_file_utils.py
    4. # @time: 2022/7/31 16:22
    5. # @desc: 读取、写入ini文件
    6. import os
    7. import configparser
    8. class IniFileUtils: #和框架业务无关的底层代码==》公共底层代码
    9. def __init__(self,file_path):
    10. self.ini_file_path = file_path
    11. self.conf_obj = configparser.ConfigParser()
    12. self.conf_obj.read(self.ini_file_path, encoding='utf-8')
    13. def get_config_value(self,section, key):
    14. value = self.conf_obj.get(section, key)
    15. return value
    16. def set_config_value(self,section, key, value):
    17. self.conf_obj.set(section, key, value)
    18. config_file_obj = open(self.ini_file_path, 'w')
    19. self.conf_obj.write(config_file_obj)
    20. config_file_obj.flush()
    21. config_file_obj.close()
    22. if __name__ == '__main__':
    23. current_path = os.path.dirname(__file__)
    24. config_file_path = os.path.join(current_path, '../conf/config.ini')
    25. ini_file = IniFileUtils(config_file_path)
    26. print(ini_file.get_config_value('default', 'HOSTS'))
    27. ini_file.set_config_value('default','TOKEN_VALUE', 'SSS9090')

    执行查看结果:

    ini配置文件中的token_value的值

    步骤3,重写local_config.py文件,封装读取ini文件中的值

     编写代码:

    1. # encoding: utf-8
    2. # @author: Jeffrey
    3. # @file: local_config.py
    4. # @time: 2022/7/26 21:25
    5. # @desc: 封装读取ini文件中的值
    6. import os
    7. from common.ini_file_utils import IniFileUtils
    8. current_path = os.path.dirname(os.path.abspath(__file__))
    9. config_file_path = os.path.join(current_path, '../conf/config.ini')
    10. class LocalConfig(): # #和框架业务有关系的底层代码
    11. def __init__(self,file_path = config_file_path):
    12. self.ini_file_obj = IniFileUtils(file_path)
    13. @property
    14. def get_hosts(self):
    15. '''获取ini文件中的hosts值'''
    16. hosts_value = self.ini_file_obj.get_config_value('default', 'hosts')
    17. return hosts_value
    18. @property
    19. def get_token_value(self):
    20. '''获取ini文件中的token_value值'''
    21. token_value = self.ini_file_obj.get_config_value('default','token_value')
    22. return token_value
    23. local_config = LocalConfig()
    24. if __name__ == '__main__':
    25. print(local_config.get_hosts)
    26. print(local_config.get_token_value)

    查看执行结果:

    步骤4、修改common_function.py文件,把获取的token值放到ini文件中

     编写代码:

    1. # encoding: utf-8
    2. # @author: Jeffrey
    3. # @file: common_function.py
    4. # @time: 2022/7/26 21:01
    5. # @desc: 模块化框架
    6. import os
    7. import jsonpath
    8. from common.local_config import local_config
    9. from common.common_api_info import CommonApiInfo
    10. from common.ini_file_utils import IniFileUtils
    11. current_path = os.path.dirname(os.path.abspath(__file__))
    12. config_file_path = os.path.join(current_path, '../conf/config.ini')
    13. def save_access_token_value_info_ini_file(session_obj,hosts):
    14. """获取access_token的值并写入到ini文件中"""
    15. response = CommonApiInfo(session_obj,hosts).get_access_token_api('client_credential',
    16. 'wxf14419077f707856',
    17. '92a113bd4b5ffdc72144740dc7123c99')
    18. # 获取响应json中的access_token的值
    19. token_value = jsonpath.jsonpath(response.json(), "$.access_token")[0]
    20. # 把获取到的access_token值写入到ini文件中
    21. IniFileUtils(config_file_path).set_config_value('default', 'token_value', token_value)
    22. # return token_value
    23. if __name__ == '__main__':
    24. import requests
    25. save_access_token_value_info_ini_file(requests.session(), local_config.get_hosts)

    执行后查看ini文件中的token_value的值:

    已写入最新的token值

    步骤5、修改run_api_tests.py文件,先把 token值写入ini文件中

    步骤6、修改用例层的代码和获取token的py文件

    用例层的代码脚本修改前VS修改后

    VS

    修改后

    获取token的py文件:

    步骤7、执行run_api_tests.py文件,查看执行结果;

    查看报告

    Run_api_tests.py中生成了token值给ini配置文件,然后测试获取 token接口时,又调用生成了token值,为了防止后面生成值覆盖前面的值而导致ini配置文件失效,所以测试获取token接口要换不同的账号(appid和secret)

    备注:以上就是各个框架不同,讲到了从线性脚本·--·模块化框架·--·库框架·--·数据驱动


     以下是我收集到的比较好的学习教程资源,虽然不是什么很值钱的东西,如果你刚好需要,可以评论区,留言【777】直接拿走就好了

    各位想获取资料的朋友请点赞 + 评论 + 收藏,三连!

    三连之后我会在评论区挨个私信发给你们~

  • 相关阅读:
    ov多域名SSL数字证书1200元一年送一月
    Java进阶(七)Set系列集合、Map集合体系
    如何处理公司交易平台数据分析?来试一试这款工具!
    Nmap渗透测试指南之Nmap基础学习、Nmap主机发现
    【VIM】VIM中的保存和退出、VIM退出命令、如何退出vim编辑、VIM命令大全
    CET4汉译英part
    C语言笔记25 •顺序表介绍•
    IIS 80 端口重绑定
    35+大厂总监失业4个月,面试HR说:同等职级,我们要相对年轻的。
    CSS之hover的使用、+、~
  • 原文地址:https://blog.csdn.net/m0_70618214/article/details/133310843