全球最大学习平台【b站和中文IT社区csdn】服务器相继崩溃,居然是测试没学好这套自动化测试教程!

前面虽然实现了参数的关联,但是那种只是记流水账的完成功能,不便于维护,也没什么可读性,随着水平和技能的提升,再返回头去看前边写的代码,简直是惨不忍睹那样的代码是初级入门的代码水平都达不到。接下来这篇由我带领小伙伴们把每一

个鼠标点击动作写成一个函数,这样更方便维护了,而且可读性也高,后期其他维护人员在维护代码的时候看起来赏心悦目,就不会骂娘了。

  参数化的思维只需记住一点:不要写死,这样就便于维护,否则就会牵一发而动全身,一处修改导致处处修改,不便于维护。

视频教程:b站最牛Jmeter接口测试和Jmeter接口自动化测试全集

登录函数

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

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

保存草稿

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

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

提取 postid

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

删除草稿

1、传个 url 和 postid 就可以了

参考代码

1 # coding=utf-8

2 #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

3

4 #2.注释:包括记录创建时间,创建人,项目名称。

5 '''

6 Created on 2019-5-13

7 @author: 000

8 Project:学习和使用封装与调用--函数和参数化

9 '''

10 #3.导入模块

11 import requests

12

13 def login(s, url, payload):

14 

15  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",

16

17  "Accept": "application/json, text/javascript, */*; q=0.01",

18  "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

19  "Accept-Encoding": "gzip, deflate, br",

20  "Content-Type": "application/json; charset=utf-8",

21  "X-Requested-With": "XMLHttpRequest",

22  "Content-Length": "385",

23  "Cookie": "xxx 已省略",

24  "Connection": "keep-alive"

25  }

26  r = s.post(url, json=payload, headers=headers, verify=False)

27  result = r.json()

28  print (result)

29  return result['success'] # 返回 True 或 False

30 

31 def save_box(s, url2, title, body_data):

32  '''# 获取报存之后 url 地址'''

33  body = {"__VIEWSTATE": "",

34  "__VIEWSTATEGENERATOR": "FE27D343",

35  "Editor$Edit$txbTitle": title,

36  "Editor$Edit$EditorBody": "<p>"+body_data+"</p>",

37  "Editor$Edit$Advanced$ckbPublished": "on",

38  "Editor$Edit$Advanced$chkDisplayHomePage": "on",

39  "Editor$Edit$Advanced$chkComments": "on",

40  "Editor$Edit$Advanced$chkMainSyndication": "on",

41  "Editor$Edit$lkbDraft": "存为草稿",

42  }

43  r2 = s.post(url2, data=body, verify=False)

44  print(r2.url)

45  return r2.url

46 def get_postid(u):

47  '''正则提取 postid'''

48  import re

49  postid = re.findall(r"postid=(.+?)&", u)

50  print (postid) # 这里是 list

51  if len(postid) < 1:

52  return ''

53  else:

54  return postid[0]

55 def delete_box(s,url3, postid):

56  '''删除草稿箱'''

57  json3 = {"postId": postid}

58  r3 = s.post(url3, json=json3, verify=False)

59  print (r3.json())

60 if __name__ == "__main__":

61  #-------------由于博客园的登录机制改变这部分代码仅作为参考start-------

62  '''

63  #登录url

64  url = "https://passport.cnblogs.com/user/signin"

65  payload = {

66  "input1": "xxx",

67  "input2": "xxx",

68  "remember": True

69  }

70  s = requests.session()

71  login(s, url, payload)

72  '''

73  # -------------由于博客园的登录机制改变这部分代码仅作为参考end-------

74

75  #编辑随笔url

76  url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"

77  u = save_box(s, url2, "北京-宏哥学习和使用封装与调用--函数和参数化", "1、学习和使用封装与调用--函数和参数化")

78  postid = get_postid(u)

79  # 删除随笔url

80  url3 = "https://i.cnblogs.com/post/delete"

81  delete_box(s, url3, postid)

由于博客园的登录机制改变,我们想要让代码跑起来还需要用老办法绕过验证码通过cookie登录替换登录这个动作

改造代码如下

第一步:将登录方法注释掉

第二步:将登录方法所传的参数和调用登录的方法注释掉

第三步:通过cookie登录绕过验证码,实现登录

第五步:直接运行代码,查看结果

第六步:由于我们新增又删除,所以看到的界面看到的效果还是不太明显,为了让小伙伴们看到明显效果,我们这里还是通过老方法:打断点

第七步:在调用删除随笔的方法前打断点,双击方法前边出现一个大红点

第八步:debug运行代码,点击右上角的昆虫

第九步:浏览器登录查看随笔页面

postid

第十步:继续运行。执行删除随笔的方法

代码运行结果

第十一步:刷新随笔页面,查看刚刚新增的那条随笔消失了

改造后参考代码

  1 # coding=utf-8

  2 #1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

  3

  4 #2.注释:包括记录创建时间,创建人,项目名称。

  5 '''

  6 Created on 2019-5-13

  7 @author: 000

  8 Project:学习和使用封装与调用--函数和参数化

  9 '''

10 #3.导入模块

11 import requests

12 # # 先打开登录首页,获取部分cookie

13 # url = "https://passport.cnblogs.com/user/signin"

14 # # 登录成功后保存编辑内容

15 # url2= "https://i.cnblogs.com/EditPosts.aspx?opt=1"

16 # s = requests.session()    #s参数作为全局变量

17 #-------------由于博客园的登录机制改变这部分代码仅作为参考start-------

18 '''

19 def login(s, url, payload):

20 

21  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0",

22

23  "Accept": "application/json, text/javascript, */*; q=0.01",

24  "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

25  "Accept-Encoding": "gzip, deflate, br",

26  "Content-Type": "application/json; charset=utf-8",

27  "X-Requested-With": "XMLHttpRequest",

28  "Content-Length": "385",

29  "Cookie": "xxx 已省略",

30  "Connection": "keep-alive"

31  }

32  r = s.post(url, json=payload, headers=headers, verify=False)

33  result = r.json()

34  print (result)

35  return result['success'] # 返回 True 或 False

36  '''

37  # -------------由于博客园的登录机制改变这部分代码仅作为参考end-------

38 def save_box(s, url2, title, body_data):

39  '''# 获取报存之后 url 地址'''

40  body = {"__VIEWSTATE": "",

41  "__VIEWSTATEGENERATOR": "FE27D343",

42  "Editor$Edit$txbTitle": title,

43  "Editor$Edit$EditorBody": "<p>"+body_data+"</p>",

44  "Editor$Edit$Advanced$ckbPublished": "on",

45  "Editor$Edit$Advanced$chkDisplayHomePage": "on",

46  "Editor$Edit$Advanced$chkComments": "on",

47  "Editor$Edit$Advanced$chkMainSyndication": "on",

48  "Editor$Edit$lkbDraft": "存为草稿",

49  }

50  r2 = s.post(url2, data=body, verify=False)

51  print(r2.url)

52  return r2.url

53 def get_postid(u):

54  '''正则提取 postid'''

55  import re

56  postid = re.findall(r"postid=(.+?)&", u)

57  print (postid) # 这里是 list

58  if len(postid) < 1:

59  return ''

60  else:

61  return postid[0]

62 def delete_box(s,url3, postid):

63  '''删除草稿箱'''

64  json3 = {"postId": postid}

65  r3 = s.post(url3, json=json3, verify=False)

66  print (r3.json())

67 if __name__ == "__main__":

68  #-------------由于博客园的登录机制改变这部分代码仅作为参考start-------

69  '''

70  #登录url

71  url = "https://passport.cnblogs.com/user/signin"

72  payload = {

73  "input1": "xxx",

74  "input2": "xxx",

75  "remember": True

76  }

77  s = requests.session()

78  login(s, url, payload)

79  '''

80  # -------------由于博客园的登录机制改变这部分代码仅作为参考end-------

81  url = "https://passport.cnblogs.com/user/signin"

82  headers = {

83      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"

84  }  # get方法其它加个ser-Agent就可以了

85  s = requests.session()

86  r = s.get(url, headers=headers, verify=False)

87  print(s.cookies)

88  # 添加登录需要的两个cookie

89  c = requests.cookies.RequestsCookieJar()

90  c.set('.CNBlogsCookie',

91        'XXX')  # 填上面抓包内容  具体查看前边的cookie登录,这里不赘述

92  c.set('.Cnblogs.AspNetCore.Cookies',

93        'XXX')  # 填上面抓包内容  具体查看前边cookie登录,这里不赘述

94  c.set('AlwaysCreateItemsAsActive', "True")

95  c.set('AdminCookieAlwaysExpandAdvanced', "True")

96  s.cookies.update(c)

97  print(s.cookies)

98  result = r.content

99

100  #编辑随笔url

101  url2 = "https://i.cnblogs.com/EditPosts.aspx?opt=1"

102  u = save_box(s, url2, "北京-宏哥学习和使用封装与调用--函数和参数化", "1、学习和使用封装与调用--函数和参数化")

103  postid = get_postid(u)

104  # 删除随笔url

105  url3 = "https://i.cnblogs.com/post/delete"

106  delete_box(s, url3, postid)

小结

1、封装好处:

第一:重用;

第二:不必关心具体的实现;

第三:面向对象三大特征之一;

第四,具有安全性!

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

推荐阅读更多精彩内容