python接口自动化8-参数化

前言

前面一篇实现了参数的关联,那种只是记流水账的完成功能,不便于维护,也没什么可读性,接下来这篇可以把每一个动作写成一个函数,这样更方便了。

参数化的思维只需记住一点:不要写死!

一、登录函数

1.s参数是session的一个实例类,先放这里,方便写后面代码

2.登录函数传三个参数,s是需要调用前面的session类,所以必传,可以传个登录的url,然后payload是账号和密码

二、保存草稿

1.编辑内容的标题title和正文body_data参数化了,这样后面可以方便传不同值

2.这里返回了获取到新的url地址,因为后面的postid参数需要在这里提取

三、提取postid

1.这里用正则表达式提取url里面的postid

四、删除草稿

1.传个url和postid就可以了

五、参考代码:

# coding:utf-8
import requests

def login(s, url, payload):
    '''登录'''
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",
               "Accept": "application/json, text/javascript, */*; q=0.01",
               "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
               "Accept-Encoding": "gzip, deflate, br",
               "Content-Type": "application/json; charset=utf-8",
               "X-Requested-With": "XMLHttpRequest",
               "Content-Length": "385",
                "Cookie": "xxx已省略",
               "Connection": "keep-alive"
               }
    r = s.post(url, json=payload, headers=headers, verify=False)
    result = r.json()
    print result
    return result['success']    # 返回True或False

def save_box(s, url2, title, body_data):
    '''# 获取报存之后url地址'''
    body = {"__VIEWSTATE": "",
        "__VIEWSTATEGENERATOR": "FE27D343",
        "Editor$Edit$txbTitle": title,
        "Editor$Edit$EditorBody": "<p>"+body_data+"</p>",
        "Editor$Edit$Advanced$ckbPublished": "on",
        "Editor$Edit$Advanced$chkDisplayHomePage": "on",
        "Editor$Edit$Advanced$chkComments": "on",
        "Editor$Edit$Advanced$chkMainSyndication": "on",
        "Editor$Edit$lkbDraft": "存为草稿",
        }
    r2 = s.post(url2, data=body, verify=False)
    print r2.url
    return r2.url

def get_postid(u):
    '''正则提取postid'''
    import re
    postid = re.findall(r"postid=(.+?)&", u)
    print postid  # 这里是list
    if len(postid) < 1:
        return ''
    else:
        return postid[0]

def delete_box(s,url3, postid):
    '''删除草稿箱'''
    json3 = {"postId": postid}
    r3 = s.post(url3, json=json3, verify=False)
    print r3.json()

if __name__ == "__main__":
    url = "https://passport.cnblogs.com/user/signin"
    payload = {
                "input1": "xxx",
                "input2": "xxx",
                "remember": True
               }
    s = requests.session()
    # 第1步登录

    login(s, url, payload,)
    url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"
    # 第2步保存

    u = save_box(s, url2, "标题", "正文内容")
    # 第3步提取postid

    postid = get_postid(u)
    url3 = "https://i.cnblogs.com/post/delete"
    # 第4步删除

    delete_box(s, url3, postid)

对于流程类的接口,也可以参考这个模式,一个接口写成一个函数,最后关联起来。

原文发布于微信公众号 - 从零开始学自动化测试(yoyoketang)

原文发表时间:2017-05-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cs

python爬虫的东西

1303
来自专栏码云1024

c++DLL编程详解

4826
来自专栏java 成神之路

基于ReentrantLock发生死锁的解决方案

3296
来自专栏有趣的django

Flask快速入门 flask快速入门

2180
来自专栏上善若水

L001 Linux和android ndk 外部程序调用popen 和system的用法

popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程。这个进程必须由 pclose() 函数关闭...

1372
来自专栏林德熙的博客

Roslyn 使用 Target 替换占位符方式生成 nuget 打包

在项目文件的相同文件夹可以放一个 nuspec 用来告诉 VisualStudio 如何打包

1342
来自专栏流柯技术学院

LoadRunner 调用Dll完成加密解密

C++里新建工程Class Library(此处是用VS2005,在VS6是:Win32 Dynamic-Link Library)

1124
来自专栏林冠宏的技术文章

java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍

(原创,转载请说明出处!谢谢--https://cloud.tencent.com/developer/user/1148436/activities)  此文...

2007
来自专栏mini188

技术笔记:Delphi多线程应用读写锁

在多线程应用中锁是一个很简单又很复杂的技术,之所以要用到锁是因为在多进程/线程环境下,一段代码可能会被同时访问到,如果这段代码涉及到了共享资源(数据)就需要保证...

2776
来自专栏企鹅号快讯

Python编写渗透工具学习笔记二

1 用pxssh暴力破解ssh密码 因为默认情况下只有linux有ssh服务,所以此脚本只适用于在linux下使用 靶机 10.10.10.128 kali6...

1996

扫码关注云+社区

领取腾讯云代金券