ChatGPT与接口测试

简介: ChatGPT与接口测试,测试通过

1 python requests类

描述化输入

输入

用python resuests类对下面HTTP请求产生接口测试单元测试用例

目标:/login_action/

方法:POST

参数:csrfmiddlewaretoken:fxljYKsDtuE7FlONP8Pe6xwkcEZxKqVc2eDOuVc94DWhmRpuQTqRqqqOCX5ITNOT,username:cindy,password:123456进行SHA256散列

cookies:csrftoken:fxljYKsDtuE7FlONP8Pe6xwkcEZxKqVc2eDOuVc94DWhmRpuQTqRqqqOCX5ITNOT

ChatGPT回答

下面是一个使用Python的unittest框架编写的接口测试单元测试用例,用于测试127.0.0.1:8000/login_action/接口的POST请求。

代码语言:javascript

复制

import unittest
import requests    
import hashlib
class TestLoginAction(unittest.TestCase):
    def test_login_action_success(self):
        url = "http://127.0.0.1:8000/login_action/"
        data = {
            "csrfmiddlewaretoken": "fxljYKsDtuE7FlONP8Pe6xwkcEZxKqVc2eDOuVc94DWhmRpuQTqRqqqOCX5ITNOT",
            "username": "cindy",
            "password": hashlib.sha256("123456".encode('utf-8')).hexdigest()
        }
        cookies = {
            "csrftoken": "fxljYKsDtuE7FlONP8Pe6xwkcEZxKqVc2eDOuVc94DWhmRpuQTqRqqqOCX5ITNOT"
        }
        
        response = requests.post(url, data=data, cookies=cookies)
        
        # 检查响应状态码
        self.assertEqual(response.status_code, 200)    
        
        # 检查响应内容
        self.assertEqual(response.json(), {"message": "Login successful"})
if __name__ == '__main__':
    unittest.main()

在这个示例中,我们使用unittest框架编写了一个测试用例TestLoginAction,其中包含一个测试方法test_login_action_success。在这个方法中,我们使用requests库发送了一个POST请求到指定的URL,并传递了必要的数据和cookies。然后我们检查了响应的状态码和内容,以确保接口的正确性。

你可以根据实际情况修改URL、数据和cookies,以及相应的断言来编写更多的测试用例。

运行代码

代码语言:javascript

复制

结论:F
======================================================================
FAIL: test_login_action_success (__main__.TestLoginAction.test_login_action_success)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\xiang\Desktop\1.py", line 20, in test_login_action_success
    self.assertEqual(response.status_code, 200)
AssertionError: 404 != 200
               
----------------------------------------------------------------------
Ran 1 test in 0.357s
FAILED (failures=1)

当你提供的是本地服务器地址时,你可以使用以下代码中的URL变量来指定目标URL。另外,你需要确保本地服务器正在运行,并且可以访问到/login_action/接口。

由于输出是HTML,修改产生的代码:

代码语言:javascript

复制

Traceback (most recent call last):
  File "C:\Users\xiang\Desktop\1.py", line 24, in test_login_action_success
    self.assertEqual(response.json(), {"message": "Login successful"})

修改代码

代码语言:javascript

复制

import unittest
import requests
import hashlib
class TestLoginAction(unittest.TestCase):
    def test_login_action_success(self):
        url = "http://127.0.0.1:8000/login_action/"
        data = {
            "csrfmiddlewaretoken": "fxljYKsDtuE7FlONP8Pe6xwkcEZxKqVc2eDOuVc94DWhmRpuQTqRqqqOCX5ITNOT",
            "username": "cindy",
            "password": hashlib.sha256("123456".encode('utf-8')).hexdigest()    
        }
        cookies = {
            "csrftoken": "fxljYKsDtuE7FlONP8Pe6xwkcEZxKqVc2eDOuVc94DWhmRpuQTqRqqqOCX5ITNOT"
        }
                response = requests.post(url, data=data, cookies=cookies)
       
        # 检查响应状态码
        self.assertEqual(response.status_code, 200)
                # 检查响应内容
        self.assertIn("     
",response.text)
if __name__ == '__main__':
unittest.main()

用网页产生代码

输入

用python resuests类对下面HTML页面产生接口测试单元测试用例

目标:http://127.0.0.1:8000/login_action/

方法:POST

网页

代码语言:javascript

复制

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible"
content="IE=edge">
<meta name="viewport" content="width=device-width,
initial-scale=1">
<!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
<meta name="description" content="">
<meta name="author" content="">
<title>电子商务系统-登录</title>
<!-- Bootstrap core CSS -->
<link href="/static/css/signin.css"
rel="stylesheet">
<!-- Custom styles for this template -->
<link href="/static/css/bootstrap.min.css"
rel="stylesheet">
 <link
href="/static/css/my.css" rel="stylesheet">
 <script
type="text/javascript"
src="/static/js/sh256.js"></script>
 <script
type="text/javascript" >
 function
SHA256Password()
{
 document.forms["myForm"]["password"].value
= SHA256(document.forms["myForm"]["password"].value);
 return
true;
 }
</script>
</head>
<body>
<div class="container">
<form class="form-signin" name="myForm"
method="post" action="/login_action/"
enctype="multipart/form-data" onsubmit="return
SHA256Password()">
   <input type="hidden"
name="csrfmiddlewaretoken"
value="uwQOB9mHwqBm7faecgzOXi26r4wPz6e9Mip2rlGG9HBqcusud5mkHRa3e4qs7Lh6">
<h2 class="form-signin-heading">电子商务系统-登录</h2>
<p>
<label for="id_username">用户名:</label>
<input type="text" name="username"
maxlength="100" required id="id_username" value="cindy">
</p>
<p>
<label for="id_password">密码  :</label>
<input type="password" name="password" required
id="id_password" value="123456">     
</p>
<p style="color:red"></p> <br>
<button class="btn btn-lg btn-primary btn-block"
type="submit">登录</button><br>
 <a
href="\register\">注册</a>
</form>
 </div> <!--
/container -->
 </body>
</html>

password:sha256散列

cookies

cookies:csrftoken: "uwQOB9mHwqBm7faecgzOXi26r4wPz6e9Mip2rlGG9HBqcusud5mkHRa3e4qs7Lh6"

ChatGPT回答

以下是使用Python中的requests库编写的接口测试单元测试用例示例,用于模拟发送POST请求到指定的URL,并使用指定的参数和cookies:

代码语言:javascript

复制

import requests
import unittest
import hashlib  
class TestLoginActionAPI(unittest.TestCase):
    def setUp(self):
        self.base_url = "http://127.0.0.1:8000/login_action/"
    def sha256_hash(self, password):
        return hashlib.sha256(password.encode('utf-8')).hexdigest()
    def test_login_action(self):
        csrf_token = "uwQOB9mHwqBm7faecgzOXi26r4wPz6e9Mip2rlGG9HBqcusud5mkHRa3e4qs7Lh6"
        username = "cindy"
        password = self.sha256_hash("123456")
        payload = {
            'csrfmiddlewaretoken': csrf_token,
            'username': username,
            'password': password
        }
        cookies = {
            'csrftoken': csrf_token
        }
        response = requests.post(self.base_url, data=payload, cookies=cookies)
        # 添加断言来验证响应状态码和内容  
        self.assertEqual(response.status_code, 200)
        # 添加更多断言来验证API响应
if __name__ == '__main__':
    unittest.main()

在这个示例中,我们使用了Python的unittest模块来编写测试用例。setUp方法用于设置测试用例所需的基本URL,sha256_hash方法用于对密码进行SHA256散列处理,test_login_action方法用于测试登录操作,其中使用了指定的csrf token和用户名密码。

你需要根据你的具体情况和接口的预期行为来编写适当的断言语句,以验证接口的行为是否符合预期。

运行代码

测试通过

2 产生JMeter文件的jmx文件

输入

对下面HTTP请求产生用JMeter文件的jmx文件。

目标:127.0.0.1:8000/login_action/

方法:POST

参数:csrfmiddlewaretoken:fxljYKsDtuE7FlONP8Pe6xwkcEZxKqVc2eDOuVc94DWhmRpuQTqRqqqOCX5ITNOT,username:cindy,password:123456进行SHA256散列

cookies:csrftoken:fxljYKsDtuE7FlONP8Pe6xwkcEZxKqVc2eDOuVc94DWhmRpuQTqRqqqOCX5ITNOT

ChatGPT回答

以下是一个简单的JMeter测试计划示例,用于模拟发送POST请求到指定的URL,并使用给定的参数和cookies。你可以将以下内容保存到一个名为login_action.jmx的文件中。

代码语言:javascript

复制

<?xml version="1.0"
encoding="UTF-8"?>
<jmeterTestPlan version="1.2"
properties="5.0" jmeter="5.4.1">
<hashTree>
<TestPlan guiclass="TestPlanGui"
testclass="TestPlan" testname="Test Plan"
enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp
name="TestPlan.functional_mode">false</boolProp>
<boolProp
name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables"
elementType="Arguments" guiclass="ArgumentsPanel"
testclass="Arguments" testname="User Defined Variables"
enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp
name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui"
testclass="ThreadGroup" testname="Thread Group"
enabled="true">
<stringProp
name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller"
elementType="LoopController" guiclass="LoopControllerGui"
testclass="LoopController" testname="Loop Controller"
enabled="true">
<boolProp
name="LoopController.continue_forever">false</boolProp>
<intProp name="LoopController.loops">1</intProp>
</elementProp>
<stringProp
name="ThreadGroup.num_threads">1</stringProp>
<stringProp
name="ThreadGroup.ramp_time">1</stringProp>
<boolProp
name="ThreadGroup.scheduler">false</boolProp>
<stringProp
name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui"
testclass="HTTPSamplerProxy" testname="HTTP Request"
enabled="true">
<elementProp name="HTTPsampler.Arguments"
elementType="Arguments" guiclass="HTTPArgumentsPanel"
testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments">
 <elementProp
name="csrfmiddlewaretoken" elementType="HTTPArgument">
 <boolProp
name="HTTPArgument.always_encode">false</boolProp>
 <stringProp
name="Argument.value">fxljYKsDtuE7FlONP8Pe6xwkcEZxKqVc2eDOuVc94DWhmRpuQTqRqqqOCX5ITNOT</stringProp>
 <stringProp
name="Argument.metadata">=</stringProp>
 </elementProp>
 <elementProp
name="username" elementType="HTTPArgument">
 <boolProp
name="HTTPArgument.always_encode">false</boolProp>
 <stringProp
name="Argument.value">cindy</stringProp>
 <stringProp
name="Argument.metadata">=</stringProp>
 </elementProp>
 <elementProp
name="password" elementType="HTTPArgument">
 <boolProp
name="HTTPArgument.always_encode">false</boolProp>
 <stringProp
name="Argument.value">123456进行SHA256散列</stringProp>
 <stringProp
name="Argument.metadata">=</stringProp>
 </elementProp>
</collectionProp>
</elementProp>
<stringProp
name="HTTPSampler.domain">127.0.0.1</stringProp>
<stringProp
name="HTTPSampler.port">8000</stringProp>
<stringProp
name="HTTPSampler.protocol"></stringProp>
<stringProp
name="HTTPSampler.contentEncoding"></stringProp>
<stringProp
name="HTTPSampler.path">/login_action/</stringProp>
<stringProp
name="HTTPSampler.method">POST</stringProp>
<boolProp
name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp
name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp
name="HTTPSampler.use_keepalive">true</boolProp>
<boolProp
name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
<boolProp
name="HTTPSampler.monitor">false</boolProp>
<stringProp
name="HTTPSampler.embedded_url_re"></stringProp>
<stringProp
name="HTTPSampler.implementation">HttpClient4</stringProp>
<elementProp name="HTTPsampler.Files"
elementType="HTTPFileArgs">
<collectionProp name="HTTPFileArgs.files"/>
</elementProp>
<stringProp
name="HTTPSampler.connect_timeout"></stringProp>
<stringProp
name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>

在这个JMeter测试计划中,我们创建了一个线程组,并在其中添加了一个HTTP请求,该请求使用了指定的URL、方法、参数和cookies。你可以根据需要对这个测试计划进行修改和扩展。

结论

用JMeter打开,界面比较粗糙

3参数化

csv文件

输入

用python resuests类对下面HTTP请求产生接口测试单元测试用例

目标:http://127.0.0.1:8000/login_action/

方法:POST

参数

csrfmiddlewaretoken=data.csv文件第1列

username=data.csv文件第2列

password=data.csv文件第3列, 进行SHA256散列

cookies

cookies:csrftoken:data.csv文件第1列

ChatGPT回答

以下是使用Python中的requests库编写的接口测试单元测试用例示例,其中密码进行了SHA256散列处理,并且包含了csrfmiddlewaretoken和csrftoken作为cookies:

代码语言:javascript

复制

import requests
import unittest
import csv
import hashlib
class TestLoginActionAPI(unittest.TestCase):
    def setUp(self):
        self.base_url = "http://127.0.0.1:8000/login_action/"
    def read_test_data(self):
        test_data = []
        with open('data.csv', 'r') as file:
            reader = csv.reader(file)
            for row in reader:
                test_data.append(row)
        return test_data
    def sha256_hash(self, password):
        return hashlib.sha256(password.encode('utf-8')).hexdigest()
    def test_login_action_with_valid_credentials(self):
        test_data = self.read_test_data()
        for data in test_data:  
            csrfmiddlewaretoken = data[0]
            username = data[1]
            password = self.sha256_hash(data[2])
            csrftoken = data[0]  # Assuming csrftoken is in the first column of data.csv
            payload = {
                'csrfmiddlewaretoken': csrfmiddlewaretoken,
                'username': username,
                'password': password
            }
            cookies = {
                'csrftoken': csrftoken
            }
            response = requests.post(self.base_url, data=payload, cookies=cookies)
            # Add assertions to validate the response status code and content
            self.assertEqual(response.status_code, 200)
            # Add more assertions as per the API response
    def test_login_action_with_invalid_credentials(self):
        # Write test cases for invalid credentials
        pass  
if __name__ == '__main__':
    unittest.main()

在这个示例中,我们使用了Python的unittest模块来编写测试用例。setUp方法用于设置测试用例所需的基本URL,read_test_data方法用于从CSV文件中读取测试数据。sha256_hash方法用于对密码进行SHA256散列处理,test_login_action_with_valid_credentials方法用于测试使用有效凭据进行登录操作,test_login_action_with_invalid_credentials方法用于测试使用无效凭据进行登录操作。

你需要根据你的具体情况和接口的预期行为来编写适当的断言语句,以验证接口的行为是否符合预期。

运行代码

测试通过

xlsx文件

输入

用python resuests类对下面HTTP请求产生接口测试单元测试用例

目标:http://127.0.0.1:8000/login_action/

方法:POST

参数

csrfmiddlewaretoken=data.xlsx文件第1列

username=data.xlsx文件第2列

password=data.xlsx文件第3列, 进行SHA256散列

cookies

cookies:csrftoken:data.xlsx文件第1列

ChatGPT回答

以下是使用Python中的requests库编写的接口测试单元测试用例示例,其中密码进行了SHA256散列处理,并且包含了csrfmiddlewaretoken和csrftoken作为cookies:

代码语言:javascript

复制

import requests
import unittest
import pandas as pd
import hashlib
class TestLoginActionAPI(unittest.TestCase):
    def setUp(self):
        self.base_url = "http://127.0.0.1:8000/login_action/"
    def read_test_data(self):
        test_data = pd.read_excel('data.xlsx')
        return test_data.values.tolist()
    def sha256_hash(self, password):
        return hashlib.sha256(password.encode('utf-8')).hexdigest()
    def test_login_action_with_valid_credentials(self):
        test_data = self.read_test_data()
        for data in test_data:
            csrfmiddlewaretoken = data[0]
            username = data[1]  
            password = self.sha256_hash(data[2])
            csrftoken = data[0]  # Assuming csrftoken is in the first column of data.xlsx
            payload = {
                'csrfmiddlewaretoken': csrfmiddlewaretoken,
                'username': username,
                'password': password
            }
            cookies = {
                'csrftoken': csrftoken
            }
            response = requests.post(self.base_url, data=payload, cookies=cookies)
            # Add assertions to validate the response status code and content
            self.assertEqual(response.status_code, 200)
            # Add more assertions as per the API response
    def test_login_action_with_invalid_credentials(self):
        # Write test cases for invalid credentials
        pass
if __name__ == '__main__':
    unittest.main()

在这个示例中,我们使用了Python的unittest模块来编写测试用例。setUp方法用于设置测试用例所需的基本URL,read_test_data方法用于从Excel文件中读取测试数据。sha256_hash方法用于对密码进行SHA256散列处理,test_login_action_with_valid_credentials方法用于测试使用有效凭据进行登录操作,test_login_action_with_invalid_credentials方法用于测试使用无效凭据进行登录操作。  

你需要根据你的具体情况和接口的预期行为来编写适当的断言语句,以验证接口的行为是否符合预期

运行代码

测试通过

目录
打赏
0
5
5
0
310
分享
相关文章
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
80 24
除了postman还有什么接口测试工具
最好还是使用国内的接口测试软件,其实国内替换postman的软件有很多,这里我推荐使用yunedit-post这款接口测试工具来代替postman,因为它除了接口测试功能外,在动态参数的支持、后置处理执行sql语句等支持方面做得比较好。而且还有接口分享功能,可以生成接口文档给团队在线浏览。
77 2
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
134 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
101 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
Python测试淘宝店铺所有商品接口的详细指南
本文详细介绍如何使用Python测试淘宝店铺商品接口,涵盖环境搭建、API接入、签名生成、请求发送、数据解析与存储、异常处理等步骤。通过具体代码示例,帮助开发者轻松获取和分析淘宝店铺商品数据,适用于电商运营、市场分析等场景。遵守法规、注意调用频率限制及数据安全,确保应用的稳定性和合法性。
使用ChatGPT生成登录产品代码的测试用例和测试脚本
使用ChatGPT生成登录产品代码的测试用例和测试脚本
116 35
Socket.IO介绍,以及怎么连接测试Socket.IO接口?
Socket.IO 是一个用于浏览器和服务器间实时双向通信的库,支持低延迟消息传递、跨平台运行及自动重连。文章介绍了其特点与调试需求,并详细说明如何使用 Apifox 工具创建、连接、发送/接收 Socket.IO 事件,以及团队协作和调试技巧。掌握这些技能可提升实时应用开发效率与质量。
通过ChatGPT生成测试用例和测试脚本(2)
通过ChatGPT生成测试用例和测试脚本
100 21
使用ChatGPT生成关于登录产品代码的单元测试代码
使用ChatGPT生成关于登录产品代码的单元测试代码
59 16

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等