【JMeter】压测工具的使用(2)

简介: 【JMeter】压测工具的使用

3. 检测秒杀的一个案例

  1. 公共文件
<?php
 header("content-type:text/html;charset=utf-8");
 $dsn='mysql:host=localhost;dbname=seckill';
 try {
       $conn= new PDO($dsn, 'root', 'root');
       $conn->exec("set names utf8");
 } catch (PDOException $e) {
      exit('数据库连接失败,错误信息:'. $e->getMessage());
 }
 $price    = 10;
 $user_id  = 1;
 $goods_id = 1;
 $sku_id   = 11;
 $number   = 1;
 //生成唯一订单
 function build_order_no(){
   return date('ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);
 }
 $sql="select number from ih_store where goods_id='$goods_id' and sku_id='$sku_id'";//解锁 此时ih_store数据中goods_id='$goods_id' and sku_id='$sku_id' 的数据被锁住(注3),其它事务必须等待此次事务 提交后才能执行
 $rs  = $conn->query($sql);
 $row = $rs->fetch(); //获取一行数据
?>
  1. 购买文件
<?php
require 'common.php';
$sql="select number from ih_store where goods_id='$goods_id' and sku_id='$sku_id'";//解锁 此时ih_store数据中goods_id='$goods_id' and sku_id='$sku_id' 的数据被锁住(注3),其它事务必须等待此次事务 提交后才能执行
$rs  = $conn->query($sql);
$row = $rs->fetch(); //获取一行数据
if ($row['number']>0) {//库存是否大于0
    $order_sn=build_order_no();
    $sql="insert into ih_order(order_sn,user_id,goods_id,sku_id,price)
    values('$order_sn','$user_id','$goods_id','$sku_id','$price')";
    $conn->query($sql);
    //库存减少
    $sql="update ih_store set number=number-{$number} where sku_id='$sku_id'";
    $f = $conn->query($sql);
    if ($f) {
        // 库存减少成功
    } else {
        // 库存减少失败
    }
} else {
    // 库存不够
}
echo "success";
  1. 数据库文件
--
-- 数据库: `big`
--
-- --------------------------------------------------------
--
-- 表的结构 `ih_goods`
--
CREATE TABLE IF NOT EXISTS `ih_goods` (
  `goods_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `cat_id` int(11) NOT NULL,
  `goods_name` varchar(255) NOT NULL,
  PRIMARY KEY (`goods_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
--
-- 转存表中的数据 `ih_goods`
--
INSERT INTO `ih_goods` (`goods_id`, `cat_id`, `goods_name`) VALUES
(1, 0, '小米手机');
-- --------------------------------------------------------
--
-- 表的结构 `ih_log`
--
CREATE TABLE IF NOT EXISTS `ih_log` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `event` varchar(255) NOT NULL,
 `type` tinyint(4) NOT NULL DEFAULT '0',
 `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--
-- 转存表中的数据 `ih_log`
--
-- --------------------------------------------------------
--
-- 表的结构 `ih_order`
--
CREATE TABLE IF NOT EXISTS `ih_order` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `order_sn` char(32) NOT NULL,
 `user_id` int(11) NOT NULL,
 `status` int(11) NOT NULL DEFAULT '0',
 `goods_id` int(11) NOT NULL DEFAULT '0',
 `sku_id` int(11) NOT NULL DEFAULT '0',
 `price` float NOT NULL,
 `addtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='订单表' AUTO_INCREMENT=1 ;
--
-- 转存表中的数据 `ih_order`
--
-- --------------------------------------------------------
--
-- 表的结构 `ih_store`
--
CREATE TABLE IF NOT EXISTS `ih_store` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `goods_id` int(11) NOT NULL,
 `sku_id` int(10) unsigned NOT NULL DEFAULT '0',
 `number` int(10) NOT NULL DEFAULT '0',
 `freez` int(11) NOT NULL DEFAULT '0' COMMENT '虚拟库存',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='库存' AUTO_INCREMENT=2 ;
--
-- 转存表中的数据 `ih_store`
--
INSERT INTO `ih_store` (`id`, `goods_id`, `sku_id`, `number`, `freez`) VALUES
(1, 1, 11, 500, 0);

屏幕快照 2022-05-18 上午12.00.39.png

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
1月前
|
编解码 NoSQL 测试技术
性能工具之Jmeter HLS 插件(入门篇)
【2月更文挑战第28天】JMeter Redis 数据集 vs CSV 数据集性能对比
82 1
性能工具之Jmeter HLS 插件(入门篇)
|
1月前
|
关系型数据库 Java 数据库连接
PostgreSQL从小白到高手教程 - 第47讲:JMETER工具使用
PostgreSQL从小白到高手教程 - 第47讲:JMETER工具使用
108 3
|
1月前
|
编解码 测试技术 索引
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
在我们简要介绍了 HLS 协议的基础知识,接下来我们详细介绍一种使用 Jmeter 编写压测 HLS 协议脚本的方法。
72 1
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
|
1月前
|
Ubuntu Java 测试技术
【Linux】一站式教会:Ubuntu(无UI界面)使用apache-jmeter进行压测
【Linux】一站式教会:Ubuntu(无UI界面)使用apache-jmeter进行压测
|
3月前
|
测试技术 UED
PTS压测问题之资源准备好慢如何解决
PTS(Performance Testing Service)是一项面向网站、应用等提供的压力测试服务,用于模拟不同场景下的用户访问,评估系统的性能表现;在进行PTS压测时,可能会出现一些异常或报错,本合集将PTS压测中频繁出现的问题及其解决办法进行汇编,旨在帮助用户更有效地进行性能测试和问题定位。
247 1
|
3月前
|
JSON 网络协议 Java
使用Jmeter进行功能和性能测试
使用Jmeter进行功能和性能测试
|
19天前
|
JSON 测试技术 数据格式
性能工具之Jmeter关联入门
【4月更文挑战第4天】关联是每个性能测试人员必须掌握的技能,是解决性能脚本中的"金钥匙"。
24 2
性能工具之Jmeter关联入门
|
1月前
|
XML Shell Linux
性能工具之 JMeter 使用 Python 脚本快速执行
性能工具之 JMeter 使用 Python 脚本快速执行
41 1
性能工具之 JMeter 使用 Python 脚本快速执行
|
1月前
|
Shell Linux 网络安全
性能工具之 JMeter 使用 shell 脚本快速执行
【2月更文挑战第30天】性能工具之 JMeter 使用 shell 脚本快速执行
103 1
性能工具之 JMeter 使用 shell 脚本快速执行
|
1月前
|
监控 数据可视化 Java
性能工具之Jmeter 后置监听器可视化数据逻辑
【2月更文挑战第29天】性能工具之Jmeter 后置监听器可视化数据逻辑
27 2
性能工具之Jmeter 后置监听器可视化数据逻辑