python开始自动化测试之前应该准备的

「这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战」。

说实话,我比较反对上来一顿操作就封装,但是如果你不封装,是不是又觉得比较low?所以还是想封装一把,它真香!

建议:

python可以先面向过程编程,将一个个的方法作用定义清楚了,再一步步的提炼精华,达到珠圆玉润的效果,这样有利于往后的面向对象编程。而且思想这东西,任何时候也不会是固定的,纵使你封装的再好,那么还会有更好,我们称之为重构;所以既然看官能花点钱买入这里,咱就不能只给大家讲基础的,不然会索然无味,下面直切主题:

1、选择python语言搭建接口测试框架,主要会用到的python库有:requests、unittest、DDT、openpyxl、HTMLTestRunner等;另外还会有pymysql、configparser、email等工具类库;

在此之前,先来思考几个问题:

  1. 框架是什么?

a.最佳实践总结

b.对预期结果的评估

c.测试工具集或测试库

d.离不开标准化的编码

复制代码
  1. 为什么要引入自动化测试?

a.解放双手,利用更多的时间去完成自动化解决不了的问题

b.无人值守,可重复测试、提升自动化测试活动效率

c.较低的维护成本,清晰的测试报告

复制代码
  1. 如何选择自动化测试框架?

a.明确目标做哪个层级的自动化测试,以达到什么样的目的?
b.测试数据如何有效管理:excel、数据库、数据关联等等?

c.是否具备自动化测试环境?

d.自动化测试应该具备什么能力?报告?日志?什么样的结果才能达到自动化测试的预期?

e.自动化测试效率、执行过程及结果的受众?报告如何、何时发送?

f.选用什么样的框架?工具、编程语言?

复制代码
  1. 封装一个http请求公共类,直接上源码:
import requests
import json
from common.HandleLogging import log


class HandleRequests(object):
    '''             
            封装一个公共http请求工具类     
    '''

    def __init__(self):
        '''                     
        构造方法,初始化requests请求方法,为了保持下一个接口请求的headers一致,故而初始为Session         
        '''
        self.session = requests.Session()

    def __call__(self, method, url, data=None, is_json=False, **kwargs):
        '''                         
                        封装一个可以被直接调用的方法         
        :param method: 请求方法         
        :param url: 请求地址         
        :param data: 请求参数         
        :param is_json: 是否json格式         
        :param kwargs: 占位,可自定义headers         
        :return: 返回一个请求结果         
        '''
        # 请求方法的参数转成小写,也可以是大写upper()
        method = method.lower()
        # 判断请求参数是否是str类型的json格式
        if isinstance(data, str):
            try:
                data = json.loads(data)  # 将json的字符串转成dict
            except Exception as e:
                log.info("str字符串json数据处理异常:{}".format(e))

        if len(data) > 0:
            data = eval(data)
        # 请求方法
        if method == 'get':
            res = self.session.request(
                method=method, url=url, params=data, **kwargs)
        elif method == 'post':
            if is_json:  # 如果是json格式的请求参数,是用json
                res = self.session.request(
                    method=method, url=url, json=data, **kwargs)
            else:
                res = self.session.request(
                    method=method, url=url, data=data, **kwargs)
        else:
            log.info("[{}]该请求方法暂不支持。".format(method))
        # session需要关闭资源
        # self.session.close()
        # json.loads(res.text)不确定返回的一定是json,所以还是还原:res
        return res
复制代码