web 接口测试入门

摘要:
在这里,我们将开发这样一个可以接收GET和POST请求的web应用程序。当然,读者需要有一定的网络开发基础。但非编程语言和web框架不是我们讨论的重点。事实上,安全测试的sql注入也是通过在输入参数中引入sql语句开始的。)Python有一个请求库,可以方便地模拟和测试POST请求POST接口测试也是如此。通过不输入空或错误的用户名和密码来检查返回的内容。

在此之前先简单的介绍一下基本概念:我们想要打开一个网站,首先是需要往浏览器的地址的URL输入框架中输入网地址。当我敲下回车后,通过HTTP协议,将网址传送到域名解析服务器,域名解析服务器根据网址找到对应的IP主机(系统服务器)。这个过程叫request,即请求;当IP主机拿到请求后,将相应的资源返回给用户浏览器。这个过程叫response,即响应。

  当用户浏览器向系统服务器请求时,有几种方法,最常用的就是GET和POST两种方法。

  在此我们来开发这样一个可以接收GET和POST请求的web应用。当然,这里就要求读者具备一定的web开发基础了。但不编程语言与web框架不是我们讨论的重点。

  以flask框架的代码为例。

GET请求                              

pyfl/

|---- /hello.py

|----/templates/

|----|-----------/index.html

|----|-----------/user.html

hello.py

复制代码
from flask import Flask,render_template
app = Flask(__name__)


@app.route("/")
def index():
    return render_template("index.html")


if __name__ == '__main__':
    app.run(debug=True)
复制代码

index.html

<h1> This is index page <h1>

启动flask容器:

 web 接口测试入门第3张

访问:http://127.0.0.1:5000/

通过firebug查看GET请求信息:

web 接口测试入门第4张

当然,这个返回只是一个静态的页面,并且不需要任何参数,我们只需要判断返回是否为200即可。

扩充hello.py如下:

复制代码
from flask import Flask,render_template
app = Flask(__name__)


@app.route("/")
def index():
    return render_template("index.html")

@app.route("/user/<name>")
def user(name):
    return render_template("user.html",name=name)


if __name__ == '__main__':
    app.run(debug=True)
复制代码

user.html

<h1> Hell, {{name}} !<h1>

访问:http://127.0.0.1:5000/user/aaa

web 接口测试入门第7张

  相比较来说,这个GET请求就复杂了一些,在请求的时候跟了一些参数(aaa),后台(hello.py)对参数了进行了接收,并且将其反回到了user.html页面中。

  这个时候,我们就可以对这个参数做一些简单的测试,比较参数为空,字符,数字,脚本,sql 之类的。其实,安全测试的sql注入也是通过输参中带入sql语句入手的。

POST请求                             

pyfl/

|---- /hello.py

|----/templates/

|----|-----------/index.html

hello.py

复制代码
from flask import Flask,render_template,request
app = Flask(__name__)


@app.route("/")
def index():
    return render_template("index.html")


@app.route("/login",methods = ['GET', 'POST'])
def login():
    if request.method == "POST":
        username = request.form.get('username')
        password = request.form.get('password')
        if username=="zhangsan" and password=="123":
            return "<h1>welcome, %s !</h1>" %username
        else:
            return "<h1>login Failure !</h1>"    
    else:
        return "<h1>login Failure !</h1>"


if __name__ == '__main__':
    app.run(debug=True)
复制代码

index.html

<form action="/login" method="post">
    username: <input type="text" name="username">
    password: <input type="password" name="password">
    <input type="submit" id="submit">
</form>

访问:http://127.0.0.1:5000/

web 接口测试入门第10张

输入用户名,密码登录(后台hello.py判定,用户名为“zhangsan”,密码为“123”登录成功,其它帐号失败。)

web 接口测试入门第11张

Python的有一个requests库,可以很方便的模拟测试POST请求。

复制代码
#coding=utf-8
import requests

s = requests

data={"username":"zhangsan","password":"123",}
r = s.post('http://127.0.0.1:5000/login', data)

print r.status_code
print r.headers['content-type']
print r.encoding
print r.text
复制代码

执行结果:

200
text/html; charset=utf-8
utf-8
<h1>welcome, zhangsan !</h1>

POST接口的测试也一样,通过不输入为空,或错误的用户名密码,检查返回的内容。

免责声明:文章转载自《web 接口测试入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇完整UI组件库Kendo UI for Vue R3 2021LoadRunner 11 安装及破解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

接口测试实例/20200622

当今在测试领域,接口测试已经越来越多的被提及,被重视。 区别于传统意义上的系统级别测试,很多测试人员在接触到接口测试的时候,也许对测试执行还可以比较顺利的上手,但一提到相关的归档,比如测试用例和报告,就有些不知所措了。 今天就用这篇文章来说说接口测试用例和报告。 1.  接口用例模板 提到测试用例,我们知道,其中最重要的两个要素就是: 测试步骤 预期结果...

自己封装的Socket组件,实现服务端多进程共享Socket对象,协同处理客户端请求

自己封装的Socket组件,实现服务端多进程共享Socket对象,协同处理客户端请求 DotNet.Net.MySocket是SLB.NET(Server Load Balance服务器负载均衡)项目中的核心组件。 在实际的项目中发现,单进程的服务端处理高并发的客户请求能力有限。 所以一直在考虑能不能象IIS Web园一样,多个进程提供一个服务,协同处理客...

移动端web页面使用position:fixed问题总结

近期完成了一个新的项目(搜狐直播),其中又涉及到了 fixed(固定位置定位)的问题,在之前的文章《移动Web产品前端开发口诀——“快”》中已经阐述过我对 iScroll 的态度,所以在这个项目中我决定不使用 iScroll,使用 position:fixed 实现头部、底部模块定位。在使用fixed的过程中,遇到了一些的问题,并且部分问题无法找到较好的解...

Spring Boot的面试题

Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家。本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力! 问题一 Spring Boot、Spring MVC 和 Spring 有什么区别? 1、Spring Spring最重要的特征是依赖注入。所有 SpringModules...

使用RESTful风格开发Java Web

什么是RESTful风格? REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移),REST 是一种体系结构,而 HTTP 是一种包含了 REST 架构属性的协议,为了便于理解,我们把它的首字母拆分成不同的几个部分: 表述性(REpresentational): REST 资源实际上可以用各种形...

接口测试中,json格式的报文发送时提示报文格式错误

最近在接口测试时遇到一个奇怪的问题,data参数为json格式,运行时总是提示报文格式不对,把data参数放到JSON在线解析里面报文也是正确的。 后来通过打印data找到了问题所在,在python中打印data数据,会自动把双引号变为单引号,而单引号JSON格式不认,所以提示报文格式错误。 可以使用json.dumps(data)方法将数据保持双引号...