当前位置: 首页>数据库>正文

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

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

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

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

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

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

登录函数

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

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

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

保存草稿

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

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

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

提取 postid

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

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

删除草稿

1、传个 url 和 postid 就可以了

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

参考代码

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登录替换登录这个动作

改造代码如下

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

postid

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

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

代码运行结果

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

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

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

改造后参考代码

? 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、封装好处:

第一:重用;

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

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

第四,具有安全性!


https://www.xamrdz.com/database/6cs1994018.html

相关文章: