python实现接口测试
Python-SHA256加密算法接口测试

Python-SHA256加密算法接⼝测试前⾔⼩伙伴们在做接⼝测试的时候,是否遇到⼀些需要加密的接⼝,但是不知如何进⾏测试呢?今天我们来学习⼀下SHA256加密算法接⼝如何进⾏测试的。
SHA256加密算法介绍:⽐特币挖矿的御⽤算法SHA256是SHA-2下细分出的⼀种算法SHA-2,名称来⾃于安全散列算法2(英语:Secure Hash Algorithm 2)的缩写,⼀种密码散列函数算法标准(哈希算法),由美国国家安全局研发,属于SHA算法之⼀,是SHA-1的后继者。
SHA-2下⼜可再分为六个不同的算法标准,包括了:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
这些变体除了⽣成摘要的长度、循环运⾏的次数等⼀些微⼩差异外,算法的基本结构是⼀致的。
对于任意长度的消息,SHA256都会产⽣⼀个256bit长的哈希值,称作消息摘要。
这个摘要相当于是个长度为32个字节的数组,通常⽤⼀个长度为64的⼗六进制字符串来表⽰。
算法特点单向加密,不可解密同明⽂,同密⽂应⽤场景⽹站验证密码,为了保证安全,不会储存明⽂密码,⽽是直接储存 hashSHA256加密算法的接⼝测试接⼝地址: http://47.96.181.17:8098/login返回格式: json请求⽅式: POST请求参数:{"userName":"您的⽤户名","password":"sha256加密后的密码"}请求头:键:Content-Type 值:application/x-www-form-urlencoded键:X-Requested-With 值:XMLHttpRequest成功返回⽰例:{'jumpUrl': 'index','success': 'true','systemUser': {'avatarName': None,'avatarPath': 'file/avatar/2020-02-06/','nickname': 'sqqdcl3','rememberMe': False,'securityDigest': None,'userId': '1','userName': 'sqqdcl'}}失败返回⽰例:{'error': {'password': '密码错误'}, 'success': 'false'}python实现sha加密传输:import requestsimport hashlib#1.实例化⼀个sha256对象sha256=hashlib.sha256()#2.加密原始值-⽐如密码,需要将字符串转成bytes(字节)sha256.update('111111'.encode('utf-8'))#print(sha256.hexdigest())header={"Content-Type":"application/x-www-form-urlencoded","X-Requested-With":"XMLHttpRequest"} #3.发送登录接⼝信息body={"userName":"sqqdcl","password":sha256.hexdigest()}resp=requests.post('http://47.96.181.17:8098/login',data=body,headers=header)print(resp.text)成功返回的结果截图:失败返回的结果截图:。
pytest接口自动化断言方法

pytest接口自动化断言方法pytest是一种广泛使用的Python测试框架,可以用于编写接口自动化测试用例。
在接口自动化测试中,断言是非常重要的一环,用于判断接口的返回结果是否符合预期。
本文将介绍pytest中常用的断言方法,并且通过示例代码演示其使用方法。
1. assert关键字assert是Python语言中的一个关键字,用于断言一个条件是否为真。
在pytest中,使用assert关键字可以进行断言操作。
示例代码:```def test_login(:# 调用接口登录,返回结果为response# 使用assert关键字进行断言操作assert response.status_code == 200assert response.json(['code'] == 200assert response.json(['message'] == '登录成功'```以上代码中,首先调用登录接口,并将返回结果赋值给response变量。
然后使用assert关键字进行断言操作,判断response的状态码、返回的code和message是否符合预期。
2. assert断言方法除了使用assert关键字进行断言外,pytest还提供了一系列的断言方法,用于提供更多的断言操作。
常用的断言方法如下:(1)assert_equal(x, y, msg=None)判断x和y是否相等。
示例代码:```def test_add(:result = 1 + 2assert assert_equal(result, 3, msg='加法错误')```以上代码中,首先计算1 + 2的结果,然后使用assert_equal方法断言结果是否为3(2)assert_not_equal(x, y, msg=None)判断x和y是否不相等。
示例代码:```def test_sub(:result = 5 - 2assert assert_not_equal(result, 2, msg='减法错误')```以上代码中,首先计算5 - 2的结果,然后使用assert_not_equal 方法断言结果是否不为2(3)assert_in(x, container, msg=None)判断x是否在container中。
【测试开发】八、接口测试-后端-模块树列表接口实现,使用HutoolUtil中TreeUt。。。

【测试开发】⼋、接⼝测试-后端-模块树列表接⼝实现,使⽤HutoolUtil中TreeUt。
国庆节快乐!基于 springboot+vue 的测试平台开发继续更新。
上次完成了接⼝定义功能的前端页⾯,那么后端现在开始逐⼀实现对应的功能,⾸先就是提供模块列表接⼝,这个模块是⽀持⼦层级的,所以⼤概结构是这样:[{id: 1,label: '默认',children: [{id: 4,label: '⼆级⼦模块1',children: [{id: 9,label: '三级⼦模块1'},{id: 10,label: '三级⼦模块2'}]}]},{id: 2,label: '⼀级⼦模块2',children: [{id: 5,label: '⼆级⼦模块 1'},{id: 6,label: '⼆级⼦模块 2'}]}]通常来说,可以写递归代码来找出⼦层级的数据,然后再进⾏封装返回出来,⽐较⿇烦。
后来发现 HutoolUtil 中有个⼯具类 TreeUtil 可以完成我需求,⾮常便捷,本次就使⽤它来实现。
HutoolUtil 这个框架还是⼤奇分享给我的,这货是个测试领域资深⼤佬,它的公众号⾥更是⼲活满满。
⽽且最近他在更新基于python语⾔的web开发知识,不容错过。
VX搜索【⼤奇测试开发】即可找到他。
⾔归正传,下⾯来完成接⼝功能的开发。
⼀、引⽤ HutoolUtilHutool是⼀个⼩⽽全的Java⼯具类库,通过静态⽅法封装,降低相关API的学习成本,提⾼⼯作效率,使Java拥有函数式语⾔般的优雅,让Java语⾔也可以“甜甜的”。
Hutool中的⼯具⽅法来⾃每个⽤户的精雕细琢,它涵盖了Java开发底层代码中的⽅⽅⾯⾯,它既是⼤型项⽬开发中解决⼩问题的利器,也是⼩型项⽬中的效率担当;Hutool是项⽬中“util”包友好的替代,它节省了开发⼈员对项⽬中公⽤类和公⽤⼯具⽅法的封装时间,使开发专注于业务,同时可以最⼤限度的避免封装不完善带来的bug。
Python-签名接口测试

Python-签名接⼝测试前⾔在之前的随笔中,我们已经学过了如何使⽤使⽤JMeter和Postman实现sign签名接⼝校验的接⼝测试,今天我们来学习⼀下如何写Python脚本实现签名接⼝的接⼝测试。
签名接⼝:参数为: {"phoneNum":"123434","optCode":"testfan","timestamp":"1211212","sign":"fdsfdsaafsasfas"} 其中,sign字段是按照特定算法进⾏加密后的数据本接⼝的签名算法为 sign=Md5(phoneNum+ optCode+ timestamp)代码如下:import timeimport randomimport hashlibimport requestsimport json#1.⽣成5位随机数phone=random.randint(10000,99999)#2.⽣成13位数字的时间戳timeStamp=int(round(time.time()*1000))print(timeStamp)optCode="testfan"#3.随机数和时间戳拼接t=str(phone+timeStamp)#4.sign=随机数phoneNum+optCodesign=t+optCode#5.实例化⼀个md5对象md5=hashlib.md5()#6.sign字段进⾏md5加密md5.update(sign.encode("utf-8"))print(md5.hexdigest())def md5_sign():url ="http://localhost:8080/pinter/com/userInfo"header={"Content-Type":"application/json" }body={"phoneNum":phone,"optCode":"testfan","timestamp":timeStamp,"sign":md5.hexdigest()}respon = requests.post(url=url, headers=header,data=body)return respon.json()if __name__ == '__main__':print(md5_sign())。
python怎么实现接口_Python接口开发实现步骤详解

python怎么实现接口_Python接口开发实现步骤详解Python是一种非常灵活的编程语言,可以通过多种方式实现接口。
下面是一个使用Python实现接口的详细步骤。
1.确定接口的功能和要求:在开始编写代码之前,首先需要确定接口的功能和要求。
这包括接口应该提供哪些方法、参数以及预期的返回值等。
2. 定义接口类:在Python中,我们可以使用抽象基类(Abstract Base Class)来定义接口。
抽象基类是一个包含抽象方法(只有方法签名,没有具体实现)的类。
我们可以通过继承这个类来实现接口。
```pythonfrom abc import ABC, abstractmethodclass MyInterface(ABC):def method1(self, param1: int) -> str:passdef method2(self, param2: str) -> int:pass```在上面的代码中,我们定义了一个名为MyInterface的接口类,其中包含了两个抽象方法`method1`和`method2`。
3.实现接口:接下来,我们需要创建一个具体的类来实现接口。
这个类需要继承自接口类,并实现接口中的所有抽象方法。
```pythonclass MyClass(MyInterface):def method1(self, param1: int) -> str:# 实现method1的具体逻辑return str(param1)def method2(self, param2: str) -> int:# 实现method2的具体逻辑return len(param2)```在上面的代码中,我们创建了一个名为MyClass的类,它继承自MyInterface接口类,并实现了接口中的抽象方法`method1`和`method2`。
4.使用接口对象:现在我们可以创建一个接口对象,并使用它的方法来调用实现类中的具体逻辑。
Python3webservice接口测试代码详解

Python3webservice接⼝测试代码详解⼀、使⽤python3做webervice接⼝测试的第三⽅库选择suds-jurko库,可以直接pip命令直接下载,也可以在pypi官⽹下载压缩包进⾏⼿动安装⼆、安装好后,导⼊Client:from suds.client import Client。
发送⼀条请求from suds.client import Clienturl = '/WebServices/WeatherWebService.asmx?wsdl'client = Client(url)# 打印所有webservice接⼝信息print(client)但是会出现错误:Traceback (most recent call last):File "E:/PycharmProjects/lianxiUItestSelenium/***.py", line 53, in <module>client = Client('/WebServices/WeatherWebService.asmx?wsdl')File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds\client.py", line 115, in __init__self.wsdl = reader.open(url)File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds\reader.py", line 150, in opend = self.fn(url, self.options)File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds\wsdl.py", line 159, in __init__self.build_schema()File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds\wsdl.py", line 220, in build_schemaself.schema = container.load(self.options)File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds sd\schema.py", line 94, in loadchild.dereference()File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds sd\schema.py", line 319, in dereferencemidx, deps = x.dependencies()File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds sd\sxbasic.py", line 437, in dependenciese = self.__deref()File "E:\PycharmProjects\lianxiUItestSelenium\venv\lib\site-packages\suds sd\sxbasic.py", line 483, in __derefraise TypeNotFound(self.ref)suds.TypeNotFound: Type not found: '(schema, /2001/XMLSchema, )'三、只需要过滤掉⼀下地址就可以了。
pytest接口自动化断言方法

pytest接口自动化断言方法pytest是一款功能强大的Python测试框架,适用于各种类型的测试。
在接口自动化测试中,pytest提供了丰富的断言方法,使得我们能够轻松地验证接口的返回结果。
以下是一些常用的pytest接口自动化断言方法:1. assert response.status_code == 200这是最基本的接口状态码验证方法,其中response是接口返回的响应对象。
如果接口返回的状态码是200,那么该断言就会通过。
2. assert 'success' in response.json()这个断言方法用于验证接口返回的json数据中是否包含指定的关键词。
如果接口返回的json数据中包含了字符串'success',那么该断言就会通过。
3. assert response.json()['code'] == 0这个断言方法用于验证接口返回的json数据中指定字段的值是否符合预期。
如果接口返回的json数据中字段'code'的值是0,那么该断言就会通过。
4. assert len(response.json()['data']) > 0这个断言方法用于验证接口返回的json数据中列表类型字段的长度是否符合预期。
如果接口返回的json数据中字段'data'的列表长度大于0,那么该断言就会通过。
5. assert response.elapsed.total_seconds() < 1这个断言方法用于验证接口请求的响应时间是否符合预期。
如果接口请求的响应时间小于1秒,那么该断言就会通过。
这些断言方法只是pytest接口自动化测试中的一部分,根据不同的测试需求,我们还可以使用其他的断言方法。
总的来说,pytest 提供了丰富的测试工具和测试方法,帮助我们更好地进行接口自动化测试。
Python接口测试基础知识(面试)习题及答案解析_2024高级测试开发工程师面试题集锦

Python接口测试基础知识(面试)习题及答案解析(答案见尾页)一、选择题1. 什么是指令测试?A. 接口测试B. 功能测试C. 集成测试D. 性能测试2. 在Python中,如何判断一个字符串是否是URL?A. 使用urlparse模块B. 使用re模块C. 使用requests模块D. 使用os模块3. Python中获取请求方法的值,应该使用哪个函数?A. request.methodB. request.get_methodC. request.urlD. request.build_url4. Python中如何发送POST请求?A. requests.post()B. requests.put()C. requests.patch()D. requests.delete()5. 在Python中,如何判断一个响应的状态码是否为?A. response.status_code == 200B. response.code == 200C. response.statustext == "200 OK"D. response.body == "OK"6. Python中如何解析JSON数据?A. json.loads()B. json.dumps()C. json.load()D. json.dump()7. 请求头中的"Content-Length"字段表示什么?A. 请求体大小B. 响应体大小C. 请求URL长度D. 请求方法8. 请求头中的"Accept"字段用于告诉服务器什么类型的内容可以接受?A. JSONB. XMLC. HTMLD. CSS9. 以下哪种情况会导致请求失败?A. 请求头中的"User-Agent"设置不正确B. 请求方法不支持C. 请求头中的"Content-Type"设置不正确D. 服务器返回错误代码40410. 如何在Python中设置请求延时?A. time.sleep(1)B. random.uniform(0.1, 1)C. requests.Session().get(url, timeout=1)D. requests.Session().put(url, timeout=1)11. 以下哪个选项不是请求头中的常见字段?A. Content-TypeB. AcceptC. User-AgentD. Authorization12. 在Python中,如何使用SQLite进行数据库操作?A. 直接使用Psycopg2库B. 使用sqlite3库C. 使用MySQLdb库D. 使用pyodbc库13. 以下哪种方法不是Python中常用的获取URL参数的方式?A. 直接在URL字符串中指定B. 使用urllib.parse库中的urlparse函数C. 使用requests库中的Request对象D. 使用os.environ14. 在Python中,如何创建一个表单并接收用户输入的数据?A. 使用flask库B. 使用django库C. 使用Flask-WTF库D. 使用Spring Boot库15. 在Python中,如何处理异常捕获?A. 使用try-except语句B. 使用raise语句C. 使用finally语句D. 使用with语句16. 如何在Python中发送POST请求?A. 使用requests库B. 使用urllib库C. 使用socket库D. 使用curl库17. 以下哪种方法是在Python中处理CSV文件的好方法?A. 使用csv库B. 使用pandas库C. 使用open函数D. 使用os库18. 在Python中,如何进行数据库连接池的管理?A. 使用pymysql库B. 使用psycopg2库C. 使用sqlite3库D. 使用pyodbc库19. 以下哪种方法是Python中进行多线程编程的最佳选择?A. 使用threading库B. 使用multiprocessing库C. 使用asyncio库D. 使用queue库20. 在Python中,如何解析JSON数据?A. 使用 `json.loads()` 函数B. 使用 `json.dumps()` 函数C. 使用 `json` 模块D. 使用 `urllib.parse.quote()` 函数21. 以下哪个函数是用来发送GET请求的?A. requests.get()B. requests.post()C. requests.put()D. requests.delete()22. 如何防止网络爬虫对网站造成过多的访问压力?A. 通过代理IPB. 设置请求速度限制C. 模拟用户浏览器行为D. 使用第三方CDN加速23. 以下哪个模块在Python中主要用于处理网络爬虫?A. requestsB. BeautifulSoupC. scrapyD. lxml24. 如何处理请求中的重定向?A. 使用 `location` 属性B. 使用 ` follow` 属性C. 使用 ` headers` 属性D. 使用 ` session` 属性25. 以下哪个错误是在发送请求时可能会遇到的?A. 请求超时B. 请求被拒绝C. 请求URL错误D. 网络连接问题26. 如何在爬虫中处理登录验证?A. 使用session对象进行登录B. 使用cookie对象进行登录C. 使用表单提交进行登录D. 使用验证码识别进行登录27. 以下哪个函数是Python中用于发送POST请求的?A. requests.get()B. requests.post()C. requests.put()D. requests.delete()28. 在Python中,可以使用哪个库来进行性能测试?A. requestsB. timeitC. unittestD. PyTest29. 以下哪种是常见的性能测试指标?A. 请求成功率B. 响应时间C. 吞吐量D. 错误率30. 如何进行接口的并发性能测试?A. 使用多线程或多进程B. 使用请求队列C. 使用代理服务器D. 使用负载均衡器31. 接口性能测试中,需要关注哪些方面的性能?A. 请求响应速度B. 资源消耗C. 可用性D. 容错能力32. 以下哪种类型的请求可以用来进行性能测试?A. 正常请求B. 随机请求C. 压力测试D. 容量测试33. 以下哪种技术可以用来模拟大量的并发请求?A. 请求队列B. 负载均衡器C. 分布式系统D. 虚拟机34. 如何评估接口的安全性?A. 检查请求头B. 检查响应状态码C. 检查数据库操作D. 检查异常处理35. 在进行性能测试时,应该将测试环境设置为实际生产环境的仿真环境。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
刚进一个新公司,可能要做接口测试,没有用过工具,抄了几行代码,根据自己的理解整理一下,供自己以后学习备用
贴上源码,也希望感兴趣的朋友一起讨论,mail: lnbcc0727@
使用说明:1.XML可以根据需要,组织测试案例,
2.EXCEL除了预期结果列要写上预期之外,其它列不用填写
3.源码实现执行XML案例,然后与EXCEL中预期做对比,最后将测试结果写入
EXCEL中(执行案例时不要打开EXCEL,以免影响写入操作)
一、XML案例源码(casedata.xml)
<?xml version="1.0" encoding="utf-8" ?>
<Services project_name="系统名称">
<servrice name="1" detail="name写相要测的服务名称">
<Operation id="TEST1" name=""
detail="每一个operation是一种接口,可增加Operation 在一个脚本中执行多个接口测试"
url="https:///" action="post">
<case id="idInputLine" detail="正确可通过的一组输入的参数">
<Parameter name="name" value="deng032ke@"/>
<Parameter name="pwd" value="mypassword"/>
</case>
<case id="idInputLine" detail="失败案例">
<Parameter name="idInputLine" value="deng032ke@"/>
<Parameter name="pwdInput" value="mypasswordk"/>
</case>
<case>
......
</case>
......
</Operation>
........
<Operation>
</Operation>
</servrice>>
</Services>
二、保存结果的EXCEL(WebServiceCases.xlsx)
三、python源码:
import requests
from xml.dom.minidom import parse
from openpyxl.reader.excel import load_workbook
# 读取XML案例和存有结果的excel
AUTO_RESULT=u"WebServiceCases.xlsx"
case_file=open(u"casedata.xml","rb")
tree=parse(file=case_file)
collection=tree.documentElement
operation_list=collection.getElementsByTagName("Operation")
print(operation_list)
book=load_workbook(AUTO_RESULT)
print(book)
sheet_names=book.get_sheet_names()
print(sheet_names)
working_sheet=book.get_sheet_by_name(sheet_names[0])
print (working_sheet)
start_index=2
for operation in operation_list:
uri=operation.getAttribute('url')
action_type=operation.getAttribute('action')
function_name=operation.getAttribute('name')
case_list=operation.getElementsByTagName('case')
print(action_type)
print(function_name)
print(case_file)
# 获得一次测试中所用到的参数的个数,定义保留参数的字典
for case in case_list:
parameter_list=case.getElementsByTagName('Parameter')
length=len(parameter_list)
print (length)
json_data={}
# 生成一个字典,字典中保留了所用到参数及所对应的测试数据
for index in range(length):
print ("index is:"+str(index))
name=parameter_list[index].getAttribute('name')
value=parameter_list[index].getAttribute('value')
json_data[name]=value
if action_type=="post":
print (json_data)
# 输入参数后系统响应
response=requests.post(uri,data=json_data)
case_id_locator='A'+str(start_index)
working_sheet.cell(case_id_locator).value=start_index book.save(AUTO_RESULT)
#将测试中所用到的URL写到测试结果中
service_url_locator='B'+str(start_index)
working_sheet.cell(service_url_locator).value=uri
book.save(AUTO_RESULT)
# 将XML文件中保存的所要测试的方法保存在结果表中。
function_name_locator='C'+str(start_index)
working_sheet.cell(function_name_locator).value=function_name
book.save(AUTO_RESULT)
# G列保存系统响应的内容
actual_result_locator='G'+str(start_index)
working_sheet.cell(actual_result_locator).value=response.content
book.save(AUTO_RESULT)
# 预期结果事先写在E列,脚本读取预期结果
expect_resutl_locator='E'+str(start_index)
expect_content=working_sheet.cell(expect_resutl_locator).value
run_result_locator='H'+str(start_index)
# 保存结果
# 如果预期的内容(expect_content)和响应的内容一致,刚通过,否则案例失败if expect_content == response.content:
print ("true")
working_sheet.cell(run_result_locator).value='PASS'
else:
print("false")
working_sheet.cell(run_result_locator).value='FAIL'
book.save(AUTO_RESULT)
# get方法响应内容
elif action_type=="get":
response=requests.get(uri,data=json_data)
print(response)
print("get the webserveric:"+ str(start_index))
start_index+=1。