除了前面文章提到的测试之外,还有一些测试也是非常有必要进行的,当然他们执行的频率没有那么高。

01

sql注入

我们在login.php中是模拟的查询数据库,真正的查询过程,很可能是由一下sql语句完成的:

select * from user where username='zhq' and pwd='123456' 

但是由于,我们的‘zhq’,‘123456’是由参数传递过来的一个变量,一些调皮的人就可以通过这两个参数做文章了,比如估计把zhq传递成zhq'-- ,那么到了程序里面执行sql就变成了:

select * from user where username='zhq'-- ‘ and pwd='123456'

那么只要是这个用户名存在,就会返回数据!!!

对付这种漏洞,开发同学是有办法的,比如使用功能完毕的框架,开启相应的模块等等,这里不多做说明了。

02

并发

我们先开发一个购物的接口,这个接口实现的功能是,每调用一次,商品的库存就会减少1个单位。

我们使用一个data.txt文件代替数据库,里面只防止一个数字,比如1000,然后编写一个文件buy.php代码如下:

<?php     // 告诉浏览器返回为json类型    header('Content-Type:application/json; charset=utf-8');    $filename = "./data.txt";    $handle = fopen($filename, "r");    //通过filesize获得文件大小,将整个文件一下子读到一个字符串中    $contents = fread($handle, filesize ($filename));    fclose($handle);    $handle = fopen($filename, "w");    $contents = $contents -1;    fwrite($handle,$contents);    fclose($handle);    // 组织的数据    $data = array(        'code' => 200,        'msg' => '购买成功',        'result' => array(            'num' => $contents        )    );    // PHP数组转json    $rst = json_encode($data,JSON_UNESCAPED_UNICODE);    // 打印结果    echo $rst;

以上代码,就是读取data.txt中的数字,做-1操作,我们正常调用结果如下:

{"code":200,"msg":"购买成功","result":{"num":999}}

但是如果这个时候,突然有10台电脑,在一刹那间同时访问,这个结果如何呢,data.txt中数字还会是990吗?下面我们来模拟这个操作:

  • 把data.txt中的文字修改回1000

  • 下载并且启动jmeter软件(百度一下如何安装和配置)

  • 在测试计划中创建一个线程组,设置10个线程,5秒钟启动:

  • 在线程中添加一个http请求

  • 给线程组添加一个同步定时器,设置超时时间是10000毫秒:

  • 给线程组添加一个一个查看结果树的监听器:

完成以上操作之后,我们将鼠标选中查看结果树,然后点击工具栏运行按钮,查看最后一个请求返回的结果:

我们可以看到,最后返回的库存数字竟然是993(这个数字有可能会变化),很明显库存并没有按照我们的预期减少10个单位,变成990 !!!!

我们来强行解释一波这个错误是怎样发生的:

当一个用户来购买商品的时候,老板还没有做减库存处理(-1的操作),来了第二个人,加塞进来,这个时候老板告诉他的自然是没有更新过的库存!

当然开发同学会有解决办法,比如让购物的顾客拍个队,顺序执行。

以上就是本篇的两个方面,在实际测试过程中,测试的频率要明显低于功能,但却很重要,当然开发同学也更会用心去做,所以出现错误的机会是很少的。

链接:https://www.jianshu.com/p/ee6b0d4d17bc

本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除

测试php数字范围_你不知道的接口测试之拾遗相关推荐

  1. php foreach 不等于_你不知道的接口测试之简单的开始

    当前的风气是,谈测试,必言"接口".其实接口并不神秘,当今的应用中无处不是"接口",从本篇开始让我来谈一些关于接口的浅薄认识. 一个简单的接口(demo.php ...

  2. 你不知道的接口测试之简单的开始

    当前的风气是,谈测试,必言"接口".其实接口并不神秘,当今的应用中无处不是"接口",从本篇开始让我来谈一些关于接口的浅薄认识. 一个简单的接口(demo.php ...

  3. 多个微服务的接口依赖如何测试_微服务测试之接口测试和契约测试

    日常开发过程中,项目的接口通常由服务提供方约定和提供,微服务模式下接口被多个消费者调用更是常态,那么提供方接口的变更如何快速.高效.无遗漏的通知给消费者呢?另外,当一个service同时被多个使用者调 ...

  4. 接口测试之主流协议测试合集(python版)

    http://t.csdn.cn/U4WHz 接口测试之主流协议测试合集(python版) 01 TCP/IP四层模型&OSI七层模型 02 IP协议 03 TCP协议 04 UDP协议 05 ...

  5. 接口返回xml格式的数据_接口测试之Jmeter串联xml数据格式请求

    点击上方蓝色字体,关注我们 要求 1.测试支付及支付检测两个接口 2.支付及检测的接口请求为xml格式 3.支付请求数据要多组不一样的数据 4.每个接口请求有些参数要求全局唯一 5.模拟正常场景,支付 ...

  6. 接口测试之Postman使用全指南(原来使用 Postman测试API接口如此简单)

     目录 一.Postman背景介绍 二.Postman的操作环境 三.Postman重要提示: 四.什么是接口测试 五.接口测试工具 六.接口测试流程 七.接口测试执行 八.全局变量和环境变量 九.p ...

  7. java接口fastjson_JSON 走进Java接口测试之fastjson指南 _好机友

    新年加入啄木鸟公众号,好运滚滚來! 顾翔老师开发的bugreport2script开源了,希望大家多提建议.文件在https://github.com/xianggu625/bug2testscrip ...

  8. jmeter异步请求测试怎么测试_JMeter接口测试之HTTP请求默认值

    不管是在UI级别的自动化测试还是在接口级别的自动化测试中,对公共数据数据的分离都是一种趋势,或者某种程度来说,这是自动化测试中必须要掌握的一种能力,是基本技能.这些公共数据就包含了测试地址,以及登录的 ...

  9. jmeter接口测试之登录测试

    注册登录_登陆接口文档 1.登录 请求地址: POST   xxxxxx/Home/Login 请求参数: args={LoginName:"mtest", // 登录名,可以为用 ...

最新文章

  1. Java 高并发面试题
  2. 如何在JavaScript中使用自定义事件
  3. 在JShell中尝试Java9 HTTP客户端和Process API
  4. 数据备份、pymysql模块
  5. QML工作笔记-在Row布局中如何进行稍许移动(图片Row布局会遇到)
  6. Python-OpenCV快速教程
  7. proxysql on github
  8. KEIL4文件无法正常使用
  9. CVPR2021:单目实时全身动作捕捉(清华大学)
  10. 幻影机器人庄园参观路线_上海幻影机器人庄园攻略,上海幻影机器人庄园门票/游玩攻略/地址/图片/门票价格【携程攻略】...
  11. C语言中extern的用法
  12. vue之使用 vue-pdf插件
  13. java 曼哈顿距离_曼哈顿距离(A *)
  14. 第六章 XML 拨号方案
  15. [CV]光场和它的各种
  16. R语言glm函数构建二分类logistic回归模型、epiDisplay包logistic.display函数获取模型汇总统计信息(自变量初始和调整后的优势比及置信区间,回归系数的Wald检验的p值
  17. 贪吃蛇html网页小游戏,网页贪吃蛇HTML5小游戏制作
  18. Python用Requests爬虫实现截屏翻译
  19. mysql必知必会的数据_MySQL必知必会--汇 总 数 据
  20. 董明珠回应“对赌”:格力与小米没有可比性

热门文章

  1. Python面向对象中:__init__() 构造方法
  2. python基础教程:修改Python列表中元素的几种方法
  3. 手写Python中列表和字符串的反转
  4. Python 爬虫使用固定代理IP
  5. 基于Django的乐观锁与悲观锁解决订单并发问题的一点浅见
  6. Name Error Connection “:1.33“ is not allowed to own the service “x“ due to security policies in the
  7. fwrite视频写入帧率测试(不用测了。。)
  8. 【编译原理】让我们来构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 1.)(python/c/c++版)(笔记)
  9. 【放置奇兵】算法 酒馆攻略
  10. Tensorflow yolov3 Intel Realsense D435 双摄像头下测试python多线程(假的多线程)self.predict()函数运行时间(191204)