最新Python+Requests实现接口自动化(1),海尔面试的问题及答案

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期福利你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。


(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

在这里插入图片描述

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

在这里插入图片描述

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

在这里插入图片描述

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

在这里插入图片描述

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

在这里插入图片描述

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

使用run()方法运行测试套件(即运行测试套件中的所有用例)

runner.run(discover)


**3.3 测试用例和lib库**


1) 由于总共只有5个接口,所以设计为5个代码文件,分别为:test\_add\_event,py,test\_add\_guest.py,test\_get\_event\_list.py,test\_get\_guest\_list.py,test\_user\_sign.py。


![在这里插入图片描述](https://img-blog.csdnimg.cn/86bfe4dea1c947258bd437b1eb233e00.png)  
 2)我们使用python的requests测试接口,这个库大名鼎鼎,而且官网还有中文。


官网网址:<http://docs.python-requests.org/zh_CN/latest/>


3)每个代码文件都是一个接口,接口的url地址是固定的,所以设计成类属性,方便后续测试用例使用。


![](https://img-blog.csdnimg.cn/b463687da46f44f7bb630d7c1ba54e13.png)  
 4)每个测试用例都写明代码逻辑,方便以后调试。  
 5)如果遇到经常调用的东西,如获取最新发布会ID,获取添加发布会body数据,都封装成库。  
 6)最后根据出参的状态码断言是否成功  
 7)使用http://logging.info 记录每个测试用例的日志情况


![](https://img-blog.csdnimg.cn/30018b060b384f6db10ad8d1b650d56b.png)  
 添加发布会接口代码文件:test\_add\_event.py



import requests
import unittest
import logging
import addEventDataTemplate
import getNewID
from urllib import parse #使用requests发送post请求,body的汉字会进行url编码,即%xx形式。想看到原始body,需要使用parse.unquote进入url解码
class Test_addEvent(unittest.TestCase):
‘’‘添加发布会接口’‘’
@classmethod
def setUpClass(cls):
cls.url=“http://127.0.0.1:8000/api/add_event/”
@classmethod
def tearDownClass(cls):
pass
def setUp(self):
pass
def tearDown(self):
pass
def test_00(self): #代码逻辑::获取当前最新发布会ID,设置入参,eid置空,发送post请求
‘’‘添加发布会-eid为空’‘’
id=getNewID.getNewID() #获取当前最新发布会ID
data=addEventDataTemplate.getEventData(id) #获取添加发布会的数据模板
data[‘eid’]=‘’ #eid为空,即参数错误
r=requests.post(self.url,data=data)
status=r.json()[‘status’]
self.assertEqual(10021,status)
logging.info(f"case:添加发布会,eid为空\n请求地址:{r.url}\t请求方式:{r.request.method}\n请求头:{r.request.headers}\n请求正文:{parse.unquote(r.request.body)}\n响应头:{r.headers}\n响应正文:{r.text}\n")

def test_01(self):    #代码逻辑::获取当前最新发布会ID,设置入参,发送post请求
    '''添加发布会-成功'''
    id = getNewID.getNewID()  # 获取当前最新发布会ID
    data = addEventDataTemplate.getEventData(id)#获取添加最新发布会的数据模板
    r=requests.post(self.url,data=data)
    status=r.json()['status']
    self.assertEqual(10000,status)
    logging.info(f"case:添加发布会,成功\n请求地址:{r.url}\t请求方式:{r.request.method}\n请求头:{r.request.headers}\n请求正文:{parse.unquote(r.request.body)}\n响应头:{r.headers}\n响应正文:{r.text}\n")

def test_02(self):   #代码逻辑::获取当前最新发布会ID,ID-1即为发布会已经存在的ID(发布会ID是递增加1)
    '''添加发布会-发布会ID已存在'''
    id = getNewID.getNewID()  # 获取当前最新发布会ID
    data=addEventDataTemplate.getEventData(id)#获取添加最新发布会的数据模板
    data['eid']=data['eid']-1  #最新模板ID减一即为重复ID
    r=requests.post(self.url,data=data)
    status = r.json()['status']
    self.assertEqual(10022, status)
    logging.info(f"case:添加发布会,发布会ID已存在\n请求地址:{r.url}\t请求方式:{r.request.method}\n请求头:{r.request.headers}\n请求正文:{parse.unquote(r.request.body)}\n响应头:{r.headers}\n响应正文:{r.text}\n")
def test_03(self):   #代码逻辑::先新增发布会,再获取最新发布会ID,设置入参的name为重复。
    '''添加发布会-发布会标题已存在'''
    #新增发布会
    id = getNewID.getNewID()  # 获取当前最新发布会ID
    r=requests.post(self.url,data=addEventDataTemplate.getEventData(id))  #先新增一个发布会

    id = getNewID.getNewID()  # 获取当前最新发布会ID
    data = addEventDataTemplate.getEventData(id)#获取添加最新发布会的数据模板
    data['name']=f'发布会测试标题{id}' #最新模板ID减一,标题即为重复
    r=requests.post(self.url,data=data)
    status = r.json()['status']
    self.assertEqual(10023,status)
    logging.info(f"case:添加发布会,发布会标题已存在\n请求地址:{r.url}\t请求方式:{r.request.method}\n请求头:{r.request.headers}\n请求正文:{parse.unquote(r.request.body)}\n响应头:{r.headers}\n响应正文:{r.text}\n")
def test_04(self):   #代码逻辑::获取最新发布会ID,设置入参,开始时间:改为-,再提交请求
    '''添加发布会-发布会时间错误'''
    id = getNewID.getNewID()  # 获取当前最新发布会ID
    data = addEventDataTemplate.getEventData(id)#获取添加最新发布会的数据模板
    data['start_time']=data['start_time'].replace(':','-')  #时间 : 改为 - ,即为时间错误
    r = requests.post(self.url, data=data)
    status = r.json()['status']
    self.assertEqual(10024,status)
    logging.info(f"case:添加发布会,发布会时间错误\n请求地址:{r.url}\t请求方式:{r.request.method}\n请求头:{r.request.headers}\n请求正文:{parse.unquote(r.request.body)}\n响应头:{r.headers}\n响应正文:{r.text}\n")

if name == ‘main’:
unittest.main(verbosity=2)
lib库 getNewID.py:

def getNewID():
‘’‘获取最新的(最大的)发布会编号id’‘’
import sqlite3
con=sqlite3.connect(r’D:\backup\guest2-master\db.sqlite3’)
cur=con.cursor()
cur.execute(“select max(id) from sign_event”)
new_id=cur.fetchone()
new_id=new_id[0]
cur.close()
con.close()
return new_id
lib库 addEventDataTemplate.py:

import datetime
def getEventData(id):
‘’‘添加发布会 body模板’‘’
startTime=(datetime.datetime.now()+datetime.timedelta(days=30)).strftime(“%Y-%m-%d %H:%M:00”) #获得当前时间,并往后30天为发布会时间

data={
      'eid':id+1,
      'name':f"发布会测试标题{id+1}",  #当前发布会编号加1
      'limit':100,    #默认值
      'status':1,    #默认值
      'address':'新街口金鹰',    #默认值
      'start_time':startTime  #%格式   Y-%m-%d %H:%M:00
    }
return data

由于篇幅的原因,其它的代码省略。


最后的测试结果:


![](https://img-blog.csdnimg.cn/c767e324583d4c19a81e9253bea0d3db.png)  
 日志结果如下:


![在这里插入图片描述](https://img-blog.csdnimg.cn/720d1b8dc7de4d239040e49300f0ccb1.png)  
 总结:在写代码的过程中,每个测试用例的代码逻辑非常重要,不管是什么逻辑,得保证每个测试用例代码都可以独立运行,不会产生耦合。还有在测试接口的时候,经常与数据库打交道,比如获取数据,判断测试结果等。


**最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】**


![](https://img-blog.csdnimg.cn/5de4729f538d4c8e8774f46cbc48891f.png#pic_center)


**上述这份完整版的学习资料已经上传CSDN官方,如果需要可以微信扫描下方CSDN官方认证二维码 即可领取**



> 
> 👉[[[CSDN大礼包:《python&全套学习资料》免费分享]]](https://bbs.csdn.net/topics/618317507)(**安全链接,放心点击**)
> 
> 
> 



![](https://img-blog.csdnimg.cn/img_convert/f82b5af4539a78501b38ad5dd18b5d7b.png)



#### 一、Python学习大纲


Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/71e2166464ed45959e2863dae1cc4835.jpeg#pic_center)


#### 二、Python必备开发工具


![在这里插入图片描述](https://img-blog.csdnimg.cn/e496e6652efd47f5bbe73ad2ee082d4a.png)


#### 三、入门学习视频


现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到1套比较全的学习资源之前,我并没着急去看第1节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做1个学习计划,我的学习计划主要包括规划图和学习进度表。



分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习

![](https://img-blog.csdnimg.cn/img_convert/21b2604bd33c4b6713f686ddd3fe5aff.png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值