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时都应该有错误信息,无信息否为空字符串
            }
        }
        
        • 注册接口
        image
        • 登录接口
        image
        • 充值接口
        image
        • 提现接口
        image
        • 投资、竞标接口


          image
    • 项目逻辑

    • 实战目标

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

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

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

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

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

        • result测试结果

          • test_result 测试结果
          • test_report 测试报告
          • image 测试截图
          • log 日志
  • 课堂作业
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)

```
难点解答
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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容