python接口自动化-实战(第一阶段)

全套视频便宜甩卖,web 接口 app自动化测试,python全栈自动化测试

目标

  • 加深对自动化的理解

    • 功能自动化:把现在手工做的东西,用代码做出来
    • 什么是自动化?建立在功能测试基础上做的
    • 什么时候做自动化?功能稳定时
    • 自动化可以帮我们做哪些事情?回归测试/比较稳定的功能/上线前快速检查
    • 最佳实现:在excel/数据库准备好测试数据--用代码读取--直接进行测试--把结果存储到excel/数据库--并出具一份测试报告+jenkeins做一个集成平台
  • 项目需求分析

    • 可行性分析:是否可做、是否稳定、优先级

    • 项目背景:项目内容P2P背景

    • 项目模块:注册、登录、充值、提现、投资;业务逻辑:后台添加数据 加标-审核-发标

      • 接口文档

        • RESTful API返回结果说明:
        {
            "status":1,//接口执行状态,1表示成功,0表示异常
            "code":10001,//业务自定义状态码,无信息否为空字符串,status=1时,code为10001,表示成功,30204表示第3个模块的第2个接口的第4个状态码,模块:用户1,标2,投资3,回款计划4,流水记录5
            "data":{
                //返回数据、对象、数组均可,为空统一设置为NULL,基于其他客户端(如Java-Objective-C)对空值(null、nil、Null)的处理空值不便或容易产生异常,可根据具体业务和前后端约定空数组为[],空字典为{}
            "msg":"成功"//该字段本次请求的业务、状态描述信息,主要用于调试、测试等,status!=1时都应该有错误信息,无信息否为空字符串
            }
        }
        
        • 注册接口
        python接口自动化-实战(第一阶段)_第1张图片
        image
        • 登录接口
        python接口自动化-实战(第一阶段)_第2张图片
        image
        • 充值接口
        python接口自动化-实战(第一阶段)_第3张图片
        image
        • 提现接口
        python接口自动化-实战(第一阶段)_第4张图片
        image
        • 投资、竞标接口


          python接口自动化-实战(第一阶段)_第5张图片
          image
    • 项目逻辑

    • 实战目标

      注册、登录、充值、提现、投资

  • 普及数据分离/代码分离/文件分离的概念

    • 数据分离
      • API_AUTO 项目名
        • run.py 代码执行入口

        • common 公共类,大家都可使用(也可以叫tools工具类)

          • conf 放置配置文件xx.conf
          • public 放置公共代码
        • test_data测试数据

        • result测试结果

          • test_result 测试结果
          • test_report 测试报告
          • image 测试截图
          • log 日志
  • 课堂作业
python接口自动化-实战(第一阶段)_第6张图片
image

实战遇到的问题

因为视频的实战项目是上课老师自己写的,现在已经无法访问,可以根据视频的原理直接用自己公司的项目进行实战。下面涉及代码基本基于自己公司的代码展示,适当打码。同时,我们公司python使用2.7版本,后期语法上可能有少少差异。
大家也用自己公司的产品练手吧。

步骤:
  • 引入requests模块
  • 发送get/post请求
  • register、login、recharge接口,按单个用例请求,调通接口
  • recharge接口需要cookies
注意点:
  • headers、cookies是关键字,都要加s,不能随便以此命名
  • 获取请求头,res.request.headers
高级用法-会话
import requests
s=requests.session() #创建一个会话
logon_res=s.get(login_url,params=login_data) #login_data必须有个key,常用是params
recharge_res=s.post(recharge_url,recharge_data) #这里就不用传cookies啦
print(recharge_res.json()) 
给类取别名
from API_AUTO.common.public.http_request import HttpRequest as ht

实例化遇到要写类名HttpRequest的地方,可以用ht代替

说明

后面开始使用自己公司的代码进行练手了,结合视频的接口自动化测试的思想。隐藏一些公司的隐私信息

登录接口:/login 
body:{"user_phone": "1801923****", "device_model": "iphone7"}
user_phone 手机号
device_model 手机型号
写run.py文件
from API_AUTO.common.public.http_request import HttpRequest #引入自己封装的http请求

#登录
payload = {"user_phone": "1801923****", "device_model": "iphone7"}
res=HttpRequest().http_request("/login","post",payload)

改造在run.py文件中

  • 通过列表[]管理测试数据

    为什么测试数据用列表嵌套字典的形式?列表嵌套其他的也可以,但是比如列表嵌套列表,那访问时,就要通过索引值去访问,但是列表嵌套字典,只需要通过他的key就可以去访问

    #run.py文件
    #代码执行的入口:
    from API_AUTO.common.public.http_request import HttpRequest
    import json
    
    def run(test_data):
        for item in test_data: #测试数据用一个list[]存储,一个{}是一条用例
            print ("正在测试的case是",item["title"])
            res = HttpRequest().http_request(item["url"], item["method"],eval(item["payload"]))
            print res.json()
    
    #测试数据
    test_data=[{"url":"/login","method":"post","payload": {"user_phone": "1801923****","device_model": "iphone7"},"title":"正确的登录"},
               {"url":"/login","method":"post","payload": {"user_phone": "1850171****", , "device_model": "iphone7"},"title":"黑名单登录"}]
    #调用函数
    run(test_data)
    
  • 通过excel管理测试数据

    为什么放在excel?数据更清晰,更方便管理

![image](https://upload-images.jianshu.io/upload_images/12041448-13ab26c04ac42388?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

写一个读取excel的工具类,在学习excel操作时写过,这次需要添加一个写回数据的方法

```
from openpyxl import load_workbook

'''
操作excel
'''
class DoExcel:
    def get_data(self,file_name,sheet_name):
        wb=load_workbook(file_name)
        sheet=wb[sheet_name]
        test_data=[] #每条数据要存在列表里
        for i in range(2, sheet.max_row+1):
            sub_data={}
            sub_data["case_id"] = sheet.cell(i, 1).value
            sub_data["url"]=sheet.cell(i,2).value
            sub_data["method"]=sheet.cell(i,3).value
            sub_data["payload"]=sheet.cell(i,4).value
            sub_data["title"]=sheet.cell(i,5).value
            test_data.append(sub_data)
        return test_data

    def write_back_data(self,file_name,sheet_name,i,value):
        wb=load_workbook(file_name)
        sheet=wb[sheet_name]
        sheet.cell(i,6).value=value
        wb.save(file_name) #保存

```

改造`run.py`
```
from API_AUTO.common.public.http_request import HttpRequest
from API_AUTO.common.public.do_excel import DoExcel

def run(test_data):
    for item in test_data:
        print "正在测试的case是",item["title"]
        res = HttpRequest("1.6.0", "android", "785c6fee0e4488ca412a5afc9a00e9d8").http_request(item["url"], item["method"],eval(item["payload"]))
        print res.json() #python2.7的print不需要括号
        DoExcel().write_back_data("test_data/test_data.xlsx","Sheet1",item["case_id"]+1,str(res.json()))

test_data=DoExcel().get_data("test_data/test_data.xlsx","Sheet1")
run(test_data)

```
难点解答
python接口自动化-实战(第一阶段)_第7张图片
image

1)wb.save(file_name)

2)不同模块不同的sheet比较好,写在一个sheet里也可以通过添加module字段区分不同模块

3)加一个登录接口的请求、或者反射机制

4)弱一点比较好

5)write_back_data()

pandas处理excel

参考文档:https://www.cnblogs.com/liulinghua90/p/9935642.html

  • 安装xlrd

  • 安装pandas

  • 日常用法

    import pandas
    
    df= pandas.read_excel("test_data.xlsx",sheet_name="Sheet1")#sheet_name不指定默认读第一个sheet
    # df dataframe
    print df.values #所有数据,返回是嵌套列表
    # 默认去掉字段名所在行,索引值从0开始
    print df.ix[0].values #读除去字段名的第1行,返回是一个列表
    print df.ix[0,1] #读除去字段名的第1行的第2列
    print df.ix[:].values #也是读取所有数据
    print df.ix[:,["url"]].values #读取指定列url
    #返回字典形式
    print df.ix[0,["url","method","payload","title"]].to_dict() #第1行,指定列,以字典形式返回
    print df.ix[0].to_dict() #第1行,不指定列,全部列输出,以字典形式返回
    
  • 读取测试数据

    import pandas
    
    df= pandas.read_excel("test_data.xlsx",sheet_name="Sheet1")
    test_data=[]
    for i in df.index.values:
        row_data=df.ix[1,["url","method","payload","title"]].to_dict()
        test_data.append(row_data)
    
    print (test_data)
    
  • 注意:pandas需要关闭excel,否则会报错找不到这个sheet_name

你可能感兴趣的:(python接口自动化-实战(第一阶段))