2024年最新基于python的接口自动化测试,最简单实用的教学!(1),2024年最新5天拿到华为软件测试岗offer

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

    else:
        session['logged_in'] = True
        return jsonify({'code': 200, 'msg': 'success'})    return jsonify({'code': 401, 'msg': error}), 401@app.route('/info', methods=['get'])def info():
if not session.get('logged_in'):        return jsonify({'code': 401, 'msg': 'please login !!'})    return jsonify({'code': 200, 'msg': 'success', 'data': 'info'})if __name__ == '__main__':
app.run(debug=True)

最后执行如下命令:



python demo.py


响应如下:



  • Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
  • Restarting with sta

大家可以看到服务已经起来了。


接口信息


登录接口


请求url


/login


请求方法


post


请求参数


| 参数名称 | 参数类型 | 参数说明 |


| :————: | :——-: | :——: |


| username | String | 登录名称 |


| password | String | 登录密码 |


响应信息


| 参数名称 | 参数类型 | 参数说明 |


| :————: | :——-: | :——: |


| code | Integer | 结果code |


| msg | String | 结果信息 |


详情接口


请求url


/info



请求方法


get



请求 cookies


| 参数名称 | 参数类型 | 参数说明 |


| :————: | :——-: | :——: |


| session | String | session |



响应信息


| 参数名称 | 参数类型 | 参数说明 |


| :————: | :——-: | :——: |


| code | Integer | 结果code |


| msg | String | 结果信息 |


| data | String | 数据信息 |


### 五、编写接口测试


  
 测试思路


* 使用 requests库模拟发送 HTTP 请求。
* 使用 python 标准库里 unittest 写测试 case。


脚本实现



#!/usr/bin/python# coding=utf-8import requestsimport unittestclass TestLogin(unittest.TestCase):

@classmethod
def setUpClass(cls):
    cls.login_url = 'http://127.0.0.1:5000/login'
    cls.info_url = 'http://127.0.0.1:5000/info'
    cls.username = 'admin'
    cls.password = '123456'

def test_login(self):
    """
    测试登录
    """
    data = {            'username': self.username,            'password': self.password
    }

    response = requests.post(self.login_url, data=data).json()        assert response['code'] == 200
    assert response['msg'] == 'success'

def test_info(self):
    """
    测试info接口
    """

    data = {            'username': self.username,            'password': self.password
    }

    response_cookies = requests.post(self.login_url, data=data).cookies
    session = response_cookies.get('session')        assert session

    info_cookies = {            'session': session
    }

    response = requests.get(self.info_url, cookies=info_cookies).json()        assert response['code'] == 200
    assert response['msg'] == 'success'
    assert response['data'] == 'info'




![](https://img-blog.csdnimg.cn/img_convert/2e37cf83d34eda71799e3376530156bc.webp?x-oss-process=image/format,png)



### 六、优化


封装接口调用


写完这个测试登录脚本,你或许会发现,在整个项目的测试过程,登录可能不止用到一次,如果每次都这么写,会不会太冗余了?


对,确实太冗余了,下面做一下简单的封装,把登录接口的调用封装到一个方法里,把调用参数暴漏出来,示例脚本如下:



#!/usr/bin/python# coding=utf-8import requestsimport unittesttry: from urlparse import urljoinexcept ImportError: from urllib.parse import urljoinclass DemoApi(object):

def __init__(self, base_url):
    self.base_url = base_url    def login(self, username, password):
    """
    登录接口
    :param username: 用户名
    :param password: 密码
    """
    url = urljoin(self.base_url, 'login')
    data = {            'username': username,            'password': password
    }        return requests.post(url, data=data).json()    def get_cookies(self, username, password):
    """
    获取登录cookies
    """
    url = urljoin(self.base_url, 'login')
    data = {            'username': username,            'password': password
    }        return requests.post(url, data=data).cookies    def info(self, cookies):
    """
    详情接口
    """
    url = urljoin(self.base_url, 'info')        return requests.get(url, cookies=cookies).json()class TestLogin(unittest.TestCase):

@classmethod
def setUpClass(cls):
    cls.base_url = 'http://127.0.0.1:5000'
    cls.username = 'admin'
    cls.password = '123456'
    cls.app = DemoApi(cls.base_url)    def test_login(self):
    """
    测试登录
    """
    response = self.app.login(self.username, self.password)        assert response['code'] == 200
    assert response['msg'] == 'success'

def test_info(self):
    """
    测试获取详情信息
    """
    cookies = self.app.get_cookies(self.username, self.password)
    response = self.app.info(cookies)        assert response['code'] == 200
    assert response['msg'] == 'success'
    assert response['data'] == 'info'

OK,在这一个版本中,我们不但在把登录接口的调用封装成了一个实例方法,实现了复用,而且还把 host(self.base\_url)提取了出来。


但问题又来了,登录之后,登录接口的 http 响应会把 session 以 cookie 的形式 set 到客户端,之后的接口都会使用此 session 去请求。


还有,就是在接口调用过程中,希望可以把日志打印出来,以便调试或者出错时查看。


好吧,我们再来改一版。


保持 cookies &增加 log 信息


使用 requests 库里的同一个 Session 对象 (它也会在同一个 Session 实例发出的所有请求之间保持 cookie ),即可解决上面的问题,示例代码如下:



img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

img-bo3gmZTr-1714843196785)]
[外链图片转存中…(img-TNNIcnNp-1714843196786)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值