概述
测试痛点
python HTTP服务
当需要对GET、POST请求的响应正文、响应状态码、响应头进行脱敏验证时,可按照如下方法进行配置:
* 响应正文
构造Content-type对应的response
* 响应状态码
通过self.send_response(status_code),设置预期的状态码
* 响应头
通过self.send_header('Content-type', 'application/json'),设置预期的Content-type类型
示例如下:
class DemoRequestHandler(SimpleHTTPRequestHandler):
def do_GET(self):
# set resp header
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
# set resp body
response = {"phone":"18812194311","card":"6222031284992747551","mail":"m182381818@qq.com","id":"510101199409038763"}
response_json = json.dumps(response)
self.wfile.write(response_json.encode())
if __name__ == '__main__':
from http.server import HTTPServer
# set httpserver port
server_address = ('', 10000)
httpd = HTTPServer(server_address, DemoRequestHandler)
httpd.serve_forever()
nginx服务
nginx作为一款非常有名的Web服务器和代理服务器,可以帮助测试中模拟多种真实服务器的场景。可根据具体场景,选取相关功能进行配置:
设置虚拟服务器
在nginx配置文件server指令中,用于定义一个虚拟服务器。server配置块通常包含一个listen指令,用于侦听请求的服务器的IP地址和端口。可接受IPv4与IPv6地址。示例如下:
server {
listen 127.0.0.1:8080;
# The rest of server configuration
}
访问不同的URL,返回特定内容
当需要根据不同URL返回对应相应内容时,可以通过配置location区段实现。location 区段应用于网站特定的URI位置,该区段能够用于server区段中,也能嵌套在其他location中。示例,返回固定的文本和json,都是在server中配置location拦截即可:
# 固定文本:
location ~ ^/get_text {
default_type text/html;
return 200 'This is text!';
}
# 固定json:
location ~ ^/get_json {
default_type application/json;
return 200 '{"status":"success","result":"nginx json"}';
}
location 指令说明:
~ : 表示uri包含正则表达式,且区分大小写。
~* : 表示uri包含正则表达式,且不区分大小写。
= : 表示uri不含正则表达式,要求严格匹配。
* 由于Linux下采用的是utf-8的字符编码,默认情况下返回中文的话浏览器用gbk来解析utf-8编码,显然会出现乱码,这时要在nginx location块中主动添加header来输出正确编码,例如:add_header Content-Type 'text/html; charset=utf-8'。
添加或修改HTTP响应头
当需要修改HTTP响应头时,可以使用nginx的add_header指令。示例如下:
server {
listen 80;
server_name your_domain.com;
location / {
add_header X-Custom-Header "Hello, World!";
add_header X-Powered-By Nginx;
add_header Cache-Control no-store;
# 其他配置...
}
}
每个add_header指令包含一个名称和值,上面我们添加了三个自定义的响应头字段:X-Custom-Header,X-Powered-By和Cache-Control。
删除HTTP响应头
当某些场景下需要从响应头中删除某些特定的字段,可以使用nginx中proxy_hide_header或fastcgi_hide_header指令,示例如下:
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass ws://backend;
proxy_hide_header X-Powered-By;
# 其他配置...
}
}
返回特定状态码
当需要模拟某些URI立即返回带有特定错误或重定向代码的响应时,可使用return返回特定状态码,示例如下:
location /wrong/url {
return 404;
}
return的第一个参数时响应码,第二个可选参数是重定向的URL或要在响应正文中返回的文本。
总结
以上,可模拟作为脱敏检测的对应服务器。欢迎大家指正,如有其他更好的方法可以和大家一起交流。