美文网首页
浅谈接口测试(六)拾遗

浅谈接口测试(六)拾遗

作者: 茧城寒舍 | 来源:发表于2020-04-28 15:35 被阅读0次

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

1. 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' 

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

详细的介绍可以参见博文:
https://www.cnblogs.com/dashu0211/articles/4793756.html

特此鸣谢

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

2. 并发

我们先开发一个购物的接口,这个接口实现的功能是,每调用一次,商品的库存就会减少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的操作),🈶️来了第二个人,加塞进来,这个时候老板告诉他的自然是没有更新过的库存!

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

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

相关文章

  • 浅谈接口测试(六)拾遗

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

  • 浅谈接口测试

    前言:没有接触接口测试之前,可能会对做接口测试感到无所适从。看再多的文档,不如动手实践来得快啦。当然,目前接触到的...

  • 浅谈接口测试

    什么是接口测试 百度百科上面是这么说的:接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统...

  • 浅谈接口测试

    工作中经常听同事去说接口,自己也经常会会去测试一下开发写的接口是否正确,发送一个值,看返回的结果是否正确。自然而然...

  • 2020-07-02

    浅谈 浅谈模块设计宏内核 浅谈接口设计Flags 浅谈稳定性设计重试 浅谈人员业务结构设计矩阵式 浅谈接口设计 |...

  • 接口性能测试-浅谈

    性能测试: 一:需求分析,什么样的需要做性能测试? 1:抢购等定时业务(并发测试) 2:注册,登录等用户较多的业务...

  • 浅谈web接口测试

    1.(web)接口的本质是什么? 在谈接口测试之前,想先问一下,接口是什么? 很多人可能使用过postman一类的...

  • 接口测试实战浅谈

    虽说对接口测试自己已通过一些简单例子练习,却没有真正在实际工作中实战过。刚好最近接到的测试项目并未开发出前端页面,...

  • 浅谈接口测试(二)接口本身

    在我们测试接口提供的数据,支持的业务功能之前,我们非常有必要再提一下接口本身的规则,即便我们在前面的章节已经隐隐约...

  • 浅谈接口自动化测试

    转载于浅谈接口自动化测试 前言 自动化测试,算是近几年比较火热的一个话题,当然,更是软件测试未来的一个发展趋势。 ...

网友评论

      本文标题:浅谈接口测试(六)拾遗

      本文链接:https://www.haomeiwen.com/subject/ffvvwhtx.html