工作随笔:从0开始,讲讲如果利用python进行接口测试

发布于:2022-12-29 ⋅ 阅读:(162) ⋅ 点赞:(0)

这份工作开始,真真切切的感觉到接口测试的重要性,接下来将介绍如何利用python进行接口测试。

目录

1,我们为什么要进行接口测试?

2,开始的契机

3,说清接口是怎么回事

4,如何写出第一个接口


1,我们为什么要进行接口测试?

这是一个真实案例:

        我们要研发一款设备,软硬件结合,我们负责管理软件上的东西,激活设备下发指令,接受设备上报的数据。这些东西需要在有硬件的时候才能测试。但是硬件也同步在开发中,所以没有设备可以提供给软件这边,软件的进度会快于硬件。

        那我们不可能等设备出来再继续工作,那么对于我们的东西,确保其没有问题,就需要接口测试了,只要设备按照约定好的协议来操作,那么我们的东西就可以确保没问题,即使后续有

2,开始的契机

        上一篇文章讲的是利用爬虫爬取日志,简化工作。

        在工作开始前,在网上随缘学习的时候学习的python和爬虫,爬虫最重要的核心实际上是接口请求,之后对数据进行解析,而学习这个也在后面的工作中真真实实的帮助到我去做测试工作。

        但实际上学习的时间也就在半个月左右,所以水平没有到那么高。

        为什么不适用工具呢,其实像jmeter和postman,还有foxAPI都用过,其实原理都是一致的,把数据填进对应的地方即可。

3,说清接口是怎么回事

        学了python之后呢,我们可以采用列举的方式来比较。

        如下,这是一段代码

    def apple(ap):
        if ap == 'apple':
            print('正确返回')
        else:
            print('小黑子')

    apple('apple')
    #return 正确返回
    apple('aaa')
    #return 小黑子

        这是一个简单的方法,输入的字段等于"apple"呢,那就返回"正确返回",如果不是呢,那就返回"小黑子"

        那跟我们的接口是什么样子的呢?

        第一,我们要知道如何调用他,上面的部分,我们用的方法名直接调用的,在接口中,这里就是我们的接口地址。

        第二,我们上面用的就只有一个参数,所以好理解,那如果换成了json呢,或者直接跟在了地址后面呢,我们需要去认识他,就好像那句“你穿上马甲我就不认识你啦”

        而一般json呢:格式化一下就是

{
"name":"string"
"phone":"string"
"openid":"string"
"devicename":"string"
"deviceid":"string"
"drving":"string"
"builerid":"string"
"isture":"string"
}

        类似于这种的。

第三,其他参数。

        那对于我们的一些步骤呢,是需要特殊参数的,比方现在用的非常多的token,以及爬虫中用来模拟页面访问的user-agent。这些参数是放在消息头的,所以需要特别设置。

第四,返回值

        调用这个方法之后,会有返回码,返回的数据等等一系列东西,就像上面的"请求正确""小黑子"一样

第四,获取这些东西

        一般而言,公司是有专门的地方去管理接口的,可以去获取,第二种方式就是自己去抓取。

        网页使用F12,一般可以抓到

        APP需要设置代理抓包。

        小程序使用体验版的调试。

        不懂得可以去找教程。

4,如何写出第一个接口

        按照我们的理论,将这些东西放到一个方法中,接口相关的顺序与上述有差异,下面将按设置的顺序解释。

        第一个是他的地址

    def sendpoint():
        url = "https://masoervicevice.cn/api/device/SendPointDataAsync"

        第三个特殊数据

headers = {
    'Content-Type': 'application/json',
    #下面是token 可以使用传参的方式放进来
    #"Authorization": "Bearer "                       
#"eyshisciOiJSUzI1NiIsImtpZCI6IjZCN0FDQzUyMDMwNUJGREI0RjcyNTJEQUVCMjE3N0NDMDkxRkFBRTEiLCJ0eXAiOiJhdCtqd3QiLCJ4NXQiOiJhM3JNVWdNRnY5dFBjbExhNnlGM3pBa2ZxdUUifQ.eyJuYmYiOjE2NTcwOTQ5MDEsImV4cCI6MTY1NzEwMjEwMSwiaXNzIjoiaHR0cHM6Ly9wc3NvLmxvbnNpZC5jbiIsImF1ZCI6IlBvcnRhbEFQSSIsImNsaWVudF9pZCI6IklPVCIsInN1YiI6IjA4ZDljYzAwLTkxZDgtYWZlNy1hODE3LWI3MGEyMzA1Yjc3ZSIsImF1dGhfdGltZSI6MTY1NzA5NDkwMSwiaWRwIjoibG9jYWwiLCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93cy8yMDA1LzA1L2lkZW50aXR5L2NsYWltcy9uYW1laWRlbnRpZmllciI6IjA4ZDljYzAwLTkxZDgtYjNkNS01YTZjLTZmMDMxMTZhMDhmNCIsImh0dHA6Ly9Mb25zaWQub3JnL2lkZW50aXR5L2NsYWltcy91c2VySWQiOiIwOGQ5Y2MwMC05MWQ4LWFmZTctYTgxNy1iNzBhMjMwNWI3N2UiLCJodHRwOi8vTG9uc2lkLm9yZy9pZGVudGl0eS9jbGFpbXMvdXNlclR5cGUiOiJXZUNoYXRBY2NvdW50IiwiaHR0cDovL0xvbnNpZC5vcmcvaWRlbnRpdHkvY2xhaW1zL2Rpc3RyaWJ1dG9ySWQiOiIxMWY0YmM3MS03MTU1LTRlNWItOTEyZi0wMzEzZjYxNDkyZDciLCJodHRwOi8vTG9uc2lkLm9yZy9pZGVudGl0eS9jbGFpbXMvd29ya2VySWQiOiJmZmEwMGYzNy1iZDdkLWU5MTEtODBmNi0wMDUwNTZiYTI1OGQiLCJodHRwOi8vTG9uc2lkLm9yZy9pZGVudGl0eS9jbGFpbXMvbGVhZElkIjoiMDhkOWQ5OGItZmZlZS04ZDgxLTM3MWEtNjY5ODE0ZjcxYjc3IiwiaHR0cDovL0xvbnNpZC5vcmcvaWRlbnRpdHkvY2xhaW1zL3RlbXBXb3JrZXJJZCI6IiIsImh0dHA6Ly9Mb25zaWQub3JnL2lkZW50aXR5L2NsYWltcy9tb2JpbGVPcmRlckFjY291bnRJZCI6IiIsImh0dHA6Ly9Mb25zaWQub3JnL2lkZW50aXR5L2NsYWltcy9tb2JpbGVPcmRlck1hbmFnZXJJZCI6IiIsImh0dHA6Ly9Mb25zaWQub3JnL2lkZW50aXR5L2NsYWltcy93ZWl4aW5vcGVuaWQiOiJvUHN1NDVjR3BaQTJCUFhsSmVPN01sM2JsY3Y0IiwiaHR0cDovL0xvbnNpZC5vcmcvaWRlbnRpdHkvY2xhaW1zL3dlaXhpbnVuaW9uaWQiOiJvVU5jWDFvTnJwaG53dExDQ0oxSTgyb2d3djQ4IiwiaHR0cDovL0xvbnNpZC5vcmcvaWRlbnRpdHkvY2xhaW1zL2lzQ2hlY2tlciI6IiIsInNjb3BlIjpbIlBvcnRhbEFQSSIsIm9mZmxpbmVfYWNjZXNzIl0sImFtciI6WyJ3ZWNoYXQiXX0.AZfvv5D9jzxOd-Y9l_QwcFaFE2INP7RK2_Mj5Ja296xQUkODAQsAwbOjec89kBUKrLRazyTX0vJNcEo8EPlGolX9Nqze8tHs2TqrStIwc2JDRFItTDJlYZlnIKEHeD8UNaL29WIxJp4hO4j0_DvgyvrvIRx3kD0sZGzm6Uw7NV7Xn55Wj28smw_LlueuxhiFjxt6a-LYjj0E-hei8bxbX4m8kPiupuN72gn1KXs43WVtJ00VXJUKYGDna3uShKMHVcXRDJCctwBcu43OhzutIU8URzoNI6nD81sJf_aseJ5zykoey6S1Z9ZBBf9MsflR1XGNCNFFXT3_fS500gNraw"
        }

        第二个 正常参数,基本上就是设置的参数,这里有个好处是,如果某个参数可以不传,就可以给他注释掉,

data = json.dumps({
          "rssi": "31,99",
          "deviceNo": "12345678999",
          "cleanDrinkingAttribute": {
            # "curState": "string",
            # "totalWater": "string",
            # "waterFlow": "string",
            # "life1": "string",
            # "life2": "string",
            # "life3": "string",
            # "life4": "string",
            # "life5": "string",
            # "max_life1": "string",
            # "max_life2": "string",
            # "max_life3": "string",
            # "max_life4": "string",
            # "max_life5": "string",
            # "active1": "string",
            # "active2": "string",
            # "active3": "string",
            # "active4": "string",
            # "active5": "string"
}})

        第四个,获取返回,这里利用response发出的请求并且拿到了返回的状态码以及值,这里有个小建议,可以先拿到状态码,做一次判断,基本上只有200是返回的json,如果是300及以上,返回的就是一段文字,由于json处理不了文字,那么使用response.text()来处理。

        response = requests.post(url=url, data=data, headers=headers)
        reslu = response.json()
        print(f"响应码{response.status_code}")

如果你想要返回里的文字。那么可以再进行处理,这里不在赘述。

最后只需要去调用。

sendpoint()

另外,需要每个接口如果单独写的话,则费时费力,利用excel相关的库可以实现数据分离。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到