2024年最全Python+Requests实现接口自动化(2),2024最新华为Python校招面试题

最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~

给大家准备的学习资料包括但不限于:

Python 环境、pycharm编辑器/永久激活/翻译插件

python 零基础视频教程

Python 界面开发实战教程

Python 爬虫实战教程

Python 数据分析实战教程

python 游戏开发实战教程

Python 电子书100本

Python 学习路线规划

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

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

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


**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)


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


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


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210511152217670.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poaWd1aWd1,size_16,color_FFFFFF,t_70)

**感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:**



① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)




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

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

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

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用Python来写一个脚本来获取华为路由器接口IP地址。你可以使用urllib模块来实现这一功能,并使用正则表达式来提取IP地址。你还可以使用requests模块来访问指定的URL,获取该网页的源代码,并解析出IP地址。 ### 回答2: 要编写一个自动获取华为路由器接口IP地址的Python脚本,首先需要使用Python的网络编程库来与路由器进行通信。以下是一个可能的实现思路: 1. 导入必要的Python库,如paramiko(用于SSH连接)、re(用于正则表达式匹配)和time(用于延时等待)。 2. 创建一个SSH连接路由器的函数。在函数中使用paramiko库来建立SSH连接,并使用用户名和密码进行身份验证。 3. 在SSH连接中执行命令来获取路由器的接口信息。使用paramiko库中的`exec_command()`函数来执行命令,并使用`recv()`函数来获取命令输出。 4. 使用正则表达式匹配从路由器接口信息中提取IP地址。可以使用re库中的`findall()`函数来匹配IP地址的模式,并将匹配到的IP地址保存在一个列表中。 5. 返回IP地址列表。 以下是一个简单的示例代码: ```python import paramiko import re import time def get_router_ip(username, password): router_ip_list = [] # SSH连接路由器 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('router_ip', username=username, password=password) # 执行命令获取接口信息 stdin, stdout, stderr = ssh.exec_command('display ip interface brief') time.sleep(1) # 等待命令执行完成 # 获取命令输出并使用正则表达式匹配IP地址 output = stdout.read().decode('utf-8') ip_addresses = re.findall(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}', output) # 将匹配到的IP地址添加到列表中 for ip_address in ip_addresses: router_ip_list.append(ip_address) # 关闭SSH连接 ssh.close() return router_ip_list # 调用函数并打印结果 username = 'your_username' password = 'your_password' router_ip_list = get_router_ip(username, password) print(router_ip_list) ``` 请注意,此示例仅提供了基本的框架和思路,实际操作中需根据华为路由器的具体配置和命令进行调整。同时,需要替换掉代码中的'router_ip'、'your_username'和'your_password'为实际的路由器IP地址、用户名和密码。 ### 回答3: 要编写一个自动获取华为路由器接口IP地址的Python脚本,你可以使用telnetlib库来远程连接路由器并发送命令。以下是一个示例脚本: ```python import telnetlib host = "路由器IP地址" username = "路由器用户名" password = "路由器密码" # 连接到路由器 tn = telnetlib.Telnet(host) # 输入用户名 tn.read_until(b"Username: ") tn.write(username.encode('ascii') + b"\n") # 输入密码 tn.read_until(b"Password: ") tn.write(password.encode('ascii') + b"\n") # 登录成功后发送命令 tn.write(b"interface brief\n") tn.write(b"display ip interface brief\n") tn.write(b"quit\n") # 读取路由器返回的结果 output = tn.read_all().decode('ascii') # 解析结果,获取接口IP地址 lines = output.split("\n") for line in lines: words = line.split() if len(words) >= 4 and words[0].startswith("GigabitEthernet"): interface = words[0] ip_address = words[1] print("接口名:", interface, " IP地址:", ip_address) # 关闭连接 tn.close() ``` 在上述脚本中,需要将`host`变量替换为你的华为路由器的IP地址,`username`和`password`变量替换为你的登录凭据。脚本首先通过telnet连接到路由器,然后输入用户名和密码进行登录。之后发送命令`interface brief`和`display ip interface brief`来获取接口IP地址的信息,并解析返回的结果,输出接口名和IP地址。最后关闭telnet连接。 请注意,使用telnet进行远程连接存在安全风险。为了更安全地获取接口IP地址,推荐使用SSH协议,可以使用`paramiko`库来进行SSH连接和命令发送。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值