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

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

时间:2023-03-08 22:39:42浏览次数:57  
标签:__ 登录 url 学好 Edit csdn Editor 测试 postid


简介

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

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

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

视频教程:​​b站最牛Jmeter接口测试和Jmeter接口自动化测试全集_哔哩哔哩_bilibilib站最牛Jmeter接口测试和Jmeter接口自动化测试全集共计100条视频,包括:jmeter【接口测试分类】、jmeter【目前接口架构设计】、jmeter【市面上的接口测试工具】等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1hq4y1K75i/?spm_id_from=333.337.search-card.all.click​

​编辑

 

登录函数

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

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

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

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

保存草稿

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

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

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

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

提取 postid

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

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

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

删除草稿

1、传个 url 和 postid 就可以了

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

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

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

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

参考代码

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】服务器相继崩溃,居然是测试没学好这套自动化测试教程!_参数化_11

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

postid

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

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

 

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

代码运行结果

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

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

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

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

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

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

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

改造后参考代码

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

第一:重用;

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

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

第四,具有安全性!



标签:__,登录,url,学好,Edit,csdn,Editor,测试,postid
From: https://blog.51cto.com/u_15997194/6108872

相关文章

  • 【C++】购书系统问题测试&功能补充
    代码来源:舍友大一的C++作业【代码存在的问题】在菜单界面选择对应序号时,若输入值非数字,而是字母等其它符号,会导致程序陷入循环,无法正常进入功能的下一步     ......
  • 搭建 Jenkins 自动化测试平台
     Jenkins自动化测试平台的作用自动化构建平台的执行流程(目标)是:我们将代码提交到代码托管工具上,如github、gitlab、gitee等。1、Jenkins要能够检测到我们的提交。2、Jen......
  • 软件测试常见面试题1000问涵盖一千+公司面试软件测试面试题(全网最全)
    前前后后面试了有20多家的公司吧,最近抽空把当时的录音整理了下,然后给大家分享下开头都是差不多,就让做一个自我介绍,这个不用再给大家普及了吧视频教程:【【呕心沥血】耗时7天......
  • .NET Github Actions 测试覆盖率
    如果熟悉GIthub我们经常可以在一些开源项目的PR上看到会配置测试的验证以及覆盖率的报告,并且可以强制覆盖率不低于设定的值才可以进行MergePR。1.测试创建一个xU......
  • 命令行中使用junit5进行类测试
    还是比较喜欢单独jar包的形式,自己编译又总是不成功。junit4与junit5语法不完全兼容。 用户手册中提到,有个适合在命令行执行的jar包https://junit.org/junit5/docs/curr......
  • 006 固定吞吐量测试
    需求说明:一个用户以20qps的频率来访问服务器,持续10秒钟,查看服务器平均响应时间使用元件:线程组--定时器--固定吞吐量定时器(constantthroughthputtimer)实现步骤创建......
  • 测试用例编写过程中要关注哪些要点?
    单元测试单元测试确保在一个段中编写的每一段代码都能产生最佳结果。开发人员在单元测试期间只看接口和确定部件。它提供了代码进展的文档,因为每个代码单元在继续......
  • 七大高效的性能测试技术
    进入互联网时代,性能测试显得越来越重要,移动应用、web应用和物联网应用都需要进行性能测试和性能调优,而进行性能和负载测试会产生了大量的数据,这些数据难以分析。除了数......
  • 那些年,我们写过的无效单元测试
    作者:陈昌毅(常意)前言那些年,为了学分,我们学会了面向过程编程;那些年,为了就业,我们学会了面向对象编程;那些年,为了生活,我们学会了面向工资编程;那些年,为了升职加薪,我们学......
  • 怎么做好APP性能测试?
    随着智能化生活的推进,我们生活中不可避免的要用到很多程序app。有的APP性能使用感很好,用户都愿意下载使用,而有的APP总是出现卡顿或网络延迟的情况,那必然就降低了用户的......