Python接口自动化测试框架【一】

本文为博主原创,未经许可严禁转载。
本文链接:https://blog.csdn.net/zyooooxie/article/details/111835459

之前我写过一篇 Session-Cookie的分享,说要把写的接口自动化框架做个分享,就开始了。

这一篇分享主要是说 整个框架的设计思路+系统登录的处理

个人博客:https://blog.csdn.net/zyooooxie

需求

来现在的公司快2年了,主要做的是财务需求;我想给这个财务系统写个接口自动化脚本;是想证明下我的能力,也想检验下我的代码水平。

成果:

0.Excel来管理用例;
1.代码放公司的git服务器;
2.Jenkins本地构建,定时执行;

在这里插入图片描述

整体设计

使用到:xlrd + requests + pymysql + pytest + allure

  1. 系统登录【requests.session()】
  2. 读取用例【excel】、测试数据的准备与处理
  3. 请求接口【requests】
  4. 断言【assert】
  5. 测试用例 Test Cases【pytest】
  6. 生成报告【allure】

具体实现

此系列分享,主要讲的是 思路+代码;
不太推荐用我的源码,是因为我这代码 不见得适用 你的需求;
你实际用不了,源码有啥用呢?
P.S:我目前所在金融测试组 去年10月招了位 全职自动化“大佬”,搞接口自动化,一个月也没啥成绩,就灰溜溜离职了。
我个人觉得:水平差就是“有罪”;提升自我这件事,万万不可偷懒。

系统登录

之前分享过 系统登录接口的详情

需求:生产+测试2套环境 都要可用;
实际我有2个思路:

  1. cookie

使用cookie

这一套方案做法是 前端登录后,拿到SESSION字段值,放到脚本来跑;

  1. requests.session()

使用session()

这一套方案是 生产环境会把验证码抛出来,手动输入【测试环境 我的账号是白名单,脚本执行 啥都不用管】;

最终我选了第二套。


class LoginLogout(object):
    url_image = '/api/auth/get/verify/image'
    url_key = '/api/auth/get/key'
    url_login = '/api/auth/login'
    url_logout = '/api/auth/logout'

    def __init__(self, env='test'):

        self.host = CommonFun.read_config(section=env, option='host')
        self.port = CommonFun.read_config(section=env, option='port')
        if self.port == '':     # 生产环境
            self.Host = ''.join(['http://', self.host])
        else:
            self.Host = ''.join(['http://', self.host, ':', self.port])

        if env == 'test' or env == 'product':
            self.url_image_new = ''.join([self.Host, self.url_image])
            self.url_key_new = ''.join([self.Host, self.url_key])
            self.url_login_new = ''.join([self.Host, self.url_login])
            self.url_logout_new = ''.join([self.Host, self.url_logout])

        else:
            raise Exception('环境传参 有误')

    def login(self):
        session = requests.session()
        res_key = session.get(self.url_key_new)
        return_key = res_key.json()['data']
        assert res_key.status_code == 200

        if self.url_key_new.find('zyooooxie') == -1:
            Log.info('测试环境')
            code_str = '1234'

        else:
            Log.info('生产环境:请手输验证码,谢谢!!!')

            res2 = session.get(url=self.url_image_new, params={
    
    'key': return_key})
            assert res2.headers['Content-Type'] == 'image/jpeg'
            code_str = input('image 验证码: ')

        res_login = session.get(url=self.url_login_new, params={
    
    'code': code_str, 'key': return_key, 'password': 'zyooooxie', 'phone': 'zyooooxie'})
        assert res_login.status_code == 200
        assert res_login.json()['msg'] == 'success'
        Log.info('登录成功')
        return session, self.Host

    def logout(self, session):
        res = session.post(self.url_logout_new)
        assert res.status_code == 200
        assert res.json()['msg'] == 'success'

        Log.info('成功退出')

    @staticmethod
    def read_config(section, option=None, config_path_name=None, getint=None, getfloat=None):
        if config_path_name is None:
            ini_path = common_dir
            ini_name = 'common.ini'
            config_path_name = os.path.join(ini_path, ini_name)

        conf = MyConf()
        conf.read(config_path_name)

        if option is None:
            return conf.items(section=section)

        if getint is not None:
            return conf.getint(section=section, option=option)
        elif getfloat is not None:
            return conf.getfloat(section=section, option=option)
        else:
            return conf.get(section=section, option=option)

在这里插入图片描述

这部分代码:

  1. 选定某个环境【默认:测试环境】;
  2. 读取 ip+port,用来拼接url;
  3. requests.session() 成功登录系统;

第一篇就主要这些;该系列第二篇 接口自动化框架之 excel用例设计

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

猜你喜欢

转载自blog.csdn.net/zyooooxie/article/details/111835459