时间:2021-07-01 10:21:17 帮助过:31人阅读
1. 下载MySQL loadrunner libraries
http://files.cnblogs.com/files/xiaoxitest/MySQL_LoadRunner_libraries.zip
2. 解压zip包,把其中bin、include文件夹下的文件拷贝到loadrunner的安装路径对应的文件夹中
C:\Program Files(x86)\HP\LoadRunner\bin
C:\Program Files(x86)\HP\LoadRunner\include
3. 准备mysql数据库信息
新建数据库demo,字符集必须是utf8mb4,排序规则可以随意填
使用sql语句建表 lr_user
- <span style="color: #0000ff;">DROP</span> <span style="color: #0000ff;">TABLE</span> <span style="color: #0000ff;">IF</span> <span style="color: #808080;">EXISTS</span><span style="color: #000000;"> `lr_user`;
- </span><span style="color: #0000ff;">CREATE</span> <span style="color: #0000ff;">TABLE</span><span style="color: #000000;"> `lr_user` (
- `id` </span><span style="color: #0000ff;">int</span>(<span style="color: #800000; font-weight: bold;">11</span>) <span style="color: #808080;">NOT</span> <span style="color: #0000ff;">NULL</span><span style="color: #000000;"> AUTO_INCREMENT,
- `mobile` </span><span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">255</span>) COLLATE utf8mb4_unicode_ci <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">NULL</span><span style="color: #000000;">,
- `pwd` </span><span style="color: #0000ff;">varchar</span>(<span style="color: #800000; font-weight: bold;">255</span>) COLLATE utf8mb4_unicode_ci <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">NULL</span><span style="color: #000000;">,
- `dtime` </span><span style="color: #0000ff;">datetime</span> <span style="color: #0000ff;">DEFAULT</span> <span style="color: #0000ff;">NULL</span><span style="color: #000000;">,
- </span><span style="color: #0000ff;">PRIMARY</span> <span style="color: #0000ff;">KEY</span><span style="color: #000000;">(`id`)
- ) ENGINE</span><span style="color: #808080;">=</span>INNODB AUTO_INCREMENT<span style="color: #808080;">=</span><span style="color: #800000; font-weight: bold;">1000</span> <span style="color: #0000ff;">DEFAULT</span> CHARSET<span style="color: #808080;">=</span>utf8mb4 COLLATE<span style="color: #808080;">=</span><span style="color: #000000;">utf8mb4_unicode_ci;
- </span>
4. 启动loadrunner,选择web-http/html协议,创建脚本
5. 编写vuser_init的脚本
引入头文件:#include "Ptt_Mysql.h",当然也可以在global.h文件中引入
定义宏(也就是全局变量):#define 大写的变量名 变量值,当然也可以在global.h文件中定义。注意不要以分号结束,要放在action外
- #include <span style="color: #800000;">"</span><span style="color: #800000;">Ptt_Mysql.h</span><span style="color: #800000;">"</span> <span style="color: #008000;">//</span><span style="color: #008000;">引用,也可以写在global.h中</span>
- <span style="color: #0000ff;">#define</span> MYSQLSERVER "192.168.0.105" <span style="color: #008000;">//</span><span style="color: #008000;">宏定义,定义一个全局变量</span>
- <span style="color: #0000ff;">#define</span> MYSQLPORT "3306"
- <span style="color: #0000ff;">#define</span> MYSQLUSERNAME "root"
- <span style="color: #0000ff;">#define</span> MYSQLPASSWORD "pertest"
- <span style="color: #0000ff;">#define</span> MYSQLDB "demo"<span style="color: #000000;">
- MYSQL </span>*Mconn; <span style="color: #008000;">//定义数据库接收类型</span>
- <span style="color: #000000;">
- vuser_init()
- {
- lr_load_dll(</span><span style="color: #800000;">"</span><span style="color: #800000;">libmysql.dll</span><span style="color: #800000;">"</span>); <span style="color: #008000;">//</span><span style="color: #008000;">加载文件</span>
- Mconn = lr_mysql_connect(MYSQLSERVER, MYSQLUSERNAME, MYSQLPASSWORD, MYSQLDB, atoi(MYSQLPORT)); <span style="color: #008000;">//</span><span style="color: #008000;">创建数据库连接</span>
- <span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
- }</span>
6. 编写vuser_end的脚本
断开数据库连接
- <span style="color: #000000;">vuser_end()
- {
- lr_mysql_disconnect(Mconn);
- </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
- }</span>
7. 编写action的脚本
(1) 查询脚本
- <span style="color: #000000;">Action()
- {
- </span><span style="color: #0000ff;">char</span> sqlQuery[<span style="color: #800080;">1024</span>]; <span style="color: #008000;">//</span><span style="color: #008000;">1024是字符长度</span>
- <span style="color: #0000ff;">int</span><span style="color: #000000;"> count;
- </span><span style="color: #008000;">//</span><span style="color: #008000;">查询脚本:SQL select脚本,把脚本字符串存储到sqlQuery中</span>
- sprintf(sqlQuery, <span style="color: #800000;">"</span><span style="color: #800000;">select * from lr_user;</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- count </span>=<span style="color: #000000;"> lr_mysql_query(Mconn, sqlQuery);
- </span><span style="color: #008000;">//</span><span style="color: #008000;">count=0,说明执行成功了。不管表里有没有数据</span>
- <span style="color: #0000ff;">if</span>(count == <span style="color: #800080;">0</span><span style="color: #000000;">) {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行成功===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">========count=%d</span><span style="color: #800000;">"</span><span style="color: #000000;">, count);
- } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行失败===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- }
- </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
- }</span>
运行结果:
- Virtual User Script started at : <span style="color: #800080;">2020</span>/<span style="color: #800080;">4</span>/<span style="color: #800080;">3</span> <span style="color: #800080;">22</span>:<span style="color: #800080;">30</span>:<span style="color: #800080;">14</span><span style="color: #000000;">
- Starting action vuser_init.
- Web Turbo Replay of LoadRunner </span><span style="color: #800080;">12.0</span>.<span style="color: #800080;">0</span> <span style="color: #0000ff;">for</span> Windows <span style="color: #800080;">2008</span> R2; build <span style="color: #800080;">2739</span> (Nov <span style="color: #800080;">30</span> <span style="color: #800080;">2014</span> <span style="color: #800080;">23</span>:<span style="color: #800080;">13</span>:<span style="color: #800080;">05</span>) [MsgId: MMSG-<span style="color: #800080;">27143</span><span style="color: #000000;">]
- Run mode: HTML [MsgId: MMSG</span>-<span style="color: #800080;">26993</span><span style="color: #000000;">]
- Run</span>-Time Settings file: <span style="color: #800000;">"</span><span style="color: #800000;">C:\Users\Administrator\Documents\VuGen\Scripts\WebHttpHtml6\\default.cfg</span><span style="color: #800000;">"</span> [MsgId: MMSG-<span style="color: #800080;">27141</span><span style="color: #000000;">]
- Ending action vuser_init.
- Running Vuser...
- Starting iteration </span><span style="color: #800080;">1</span><span style="color: #000000;">.
- Maximum number of concurrent connections per server: </span><span style="color: #800080;">6</span> [MsgId: MMSG-<span style="color: #800080;">26989</span><span style="color: #000000;">]
- Starting action Action.
- Action.c(</span><span style="color: #800080;">36</span>): ============脚本执行成功===========<span style="color: #000000;">
- Action.c(</span><span style="color: #800080;">37</span>): ========count=<span style="color: #800080;">0</span><span style="color: #000000;">
- Ending action Action.
- Ending iteration </span><span style="color: #800080;">1</span><span style="color: #000000;">.
- Ending Vuser...
- Starting action vuser_end.
- Ending action vuser_end.
- Vuser Terminated.</span>
(2) 查询有多少条记录
注意这里的返回结果类似于表格一行一列,里面的值为数据库的总记录条数:2,因此使用row[0][0].cell获取第一行第一列的值
第一列 | |
第一行 | 2 |
- <span style="color: #000000;">Action()
- {
- </span><span style="color: #0000ff;">char</span> sqlQuery[<span style="color: #800080;">1024</span>]; <span style="color: #008000;">//</span><span style="color: #008000;">1024是字符长度</span>
- <span style="color: #0000ff;">int</span><span style="color: #000000;"> count;
- </span><span style="color: #008000;">//</span><span style="color: #008000;">查询有多少个数据</span>
- sprintf(sqlQuery, <span style="color: #800000;">"</span><span style="color: #800000;">select count(0) from lr_user;</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- count </span>=<span style="color: #000000;"> lr_mysql_query(Mconn, sqlQuery);
- </span><span style="color: #008000;">//</span><span style="color: #008000;">row[列号][行号]</span>
- <span style="color: #ff0000;">lr_save_string(row[0][0].cell, "value");
- lr_output_message(lr_eval_string("{value}"));
- </span><span style="color: #008000;">//</span><span style="color: #008000;">count=0,说明执行成功了。不管表里有没有数据</span>
- <span style="color: #0000ff;">if</span>(count == <span style="color: #800080;">0</span><span style="color: #000000;">) {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行成功===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">========count=%d</span><span style="color: #800000;">"</span><span style="color: #000000;">, count);
- } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行失败===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- }
- </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
- }</span>
返回结果
- <span style="color: #000000;">Starting action Action.
- Action.c(</span><span style="color: #800080;">30</span>): Notify: Saving Parameter <span style="color: #800000;">"</span><span style="color: #800000;">value = 2</span><span style="color: #800000;">"</span><span style="color: #000000;">.
- Action.c(</span><span style="color: #800080;">31</span>): Notify: Parameter Substitution: parameter <span style="color: #800000;">"</span><span style="color: #800000;">value</span><span style="color: #800000;">"</span> = <span style="color: #800000;">"</span><span style="color: #800000;">2</span><span style="color: #800000;">"</span><span style="color: #000000;">
- Action.c(</span><span style="color: #800080;">31</span>): <span style="color: #800080;">2</span><span style="color: #000000;">
- Action.c(</span><span style="color: #800080;">37</span>): ============脚本执行成功===========<span style="color: #000000;">
- Action.c(</span><span style="color: #800080;">38</span>): ========count=<span style="color: #800080;">0</span><span style="color: #000000;">
- Ending action Action.</span>
(3) 查询某个固定的值
现在数据库已经有两条数据了,如果想要查询第一行第二列的值,可以这样写。如果没有拿到值,将会返回空字符串
- <span style="color: #000000;">Action()
- {
- </span><span style="color: #0000ff;">char</span> sqlQuery[<span style="color: #800080;">1024</span>]; <span style="color: #008000;">//</span><span style="color: #008000;">1024是字符长度</span>
- <span style="color: #0000ff;">int</span><span style="color: #000000;"> count;
- </span><span style="color: #008000;">//</span><span style="color: #008000;">查询脚本:SQL select脚本,把脚本字符串存储到sqlQuery中</span>
- sprintf(sqlQuery, <span style="color: #800000;">"</span><span style="color: #800000;">select * from lr_user;</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- count </span>=<span style="color: #000000;"> lr_mysql_query(Mconn, sqlQuery);
- </span><span style="color: #008000;">//</span><span style="color: #008000;">row[列号][行号]</span>
- lr_save_string(row[<span style="color: #800080;">1</span>][<span style="color: #800080;">0</span>].cell, <span style="color: #800000;">"</span><span style="color: #800000;">value</span><span style="color: #800000;">"</span>); <span style="color: #008000;">//</span><span style="color: #008000;">第一个[]里为0时表示id,为1时表示手机号</span>
- lr_output_message(lr_eval_string(<span style="color: #800000;">"</span><span style="color: #800000;">{value}</span><span style="color: #800000;">"</span><span style="color: #000000;">));
- </span><span style="color: #008000;">//</span><span style="color: #008000;">count=0,说明执行成功了。不管表里有没有数据</span>
- <span style="color: #0000ff;">if</span>(count == <span style="color: #800080;">0</span><span style="color: #000000;">) {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行成功===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">========count=%d</span><span style="color: #800000;">"</span><span style="color: #000000;">, count);
- } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行失败===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- }
- </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
- }</span>
运行结果
- <span style="color: #000000;">Starting action Action.
- Action.c(</span><span style="color: #800080;">30</span>): Notify: Saving Parameter <span style="color: #800000;">"</span><span style="color: #800000;">value = 13524012256</span><span style="color: #800000;">"</span><span style="color: #000000;">.
- Action.c(</span><span style="color: #800080;">31</span>): Notify: Parameter Substitution: parameter <span style="color: #800000;">"</span><span style="color: #800000;">value</span><span style="color: #800000;">"</span> = <span style="color: #800000;">"</span><span style="color: #800000;">13524012256</span><span style="color: #800000;">"</span><span style="color: #000000;">
- Action.c(</span><span style="color: #800080;">31</span>): <span style="color: #800080;">13524012256</span><span style="color: #000000;">
- Action.c(</span><span style="color: #800080;">37</span>): ============脚本执行成功===========<span style="color: #000000;">
- Action.c(</span><span style="color: #800080;">38</span>): ========count=<span style="color: #800080;">0</span><span style="color: #000000;">
- Ending action Action.</span>
(4) 插入一条数据
- <span style="color: #000000;">Action()
- {
- </span><span style="color: #0000ff;">char</span> sqlQuery[<span style="color: #800080;">1024</span>]; <span style="color: #008000;">//</span><span style="color: #008000;">1024是字符长度</span>
- <span style="color: #0000ff;">int</span><span style="color: #000000;"> count;
- </span><span style="color: #008000;">//</span><span style="color: #008000;">插入数据</span>
- sprintf(sqlQuery, <span style="color: #800000;">"</span><span style="color: #800000;">INSERT INTO lr_user(`mobile`, `pwd`, `dtime`) VALUES (‘13500023456‘, ‘123456‘, NOW());</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- count </span>=<span style="color: #000000;"> lr_mysql_query(Mconn, sqlQuery);
- </span><span style="color: #008000;">//</span><span style="color: #008000;">count=0,说明执行成功了。不管表里有没有数据</span>
- <span style="color: #0000ff;">if</span>(count == <span style="color: #800080;">0</span><span style="color: #000000;">) {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行成功===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">========count=%d</span><span style="color: #800000;">"</span><span style="color: #000000;">, count);
- } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行失败===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- }
- </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
- }</span>
(5) 参数化插入数据
- <span style="color: #000000;">Action()
- {
- </span><span style="color: #0000ff;">char</span> sqlQuery[<span style="color: #800080;">1024</span>]; <span style="color: #008000;">//</span><span style="color: #008000;">1024是字符长度</span>
- <span style="color: #0000ff;">int</span><span style="color: #000000;"> count;
- </span><span style="color: #008000;">//</span><span style="color: #008000;">参数化,插入脚本的手机号</span>
- sprintf(sqlQuery, <span style="color: #800000;">"</span><span style="color: #800000;">INSERT INTO lr_user(`mobile`, `pwd`, `dtime`) VALUES (‘%s‘, ‘123456‘, NOW());</span><span style="color: #800000;">"</span>, lr_eval_string(<span style="color: #800000;">"</span><span style="color: #800000;">135{phone}</span><span style="color: #800000;">"</span><span style="color: #000000;">));
- count </span>=<span style="color: #000000;"> lr_mysql_query(Mconn, sqlQuery);
- </span><span style="color: #008000;">//</span><span style="color: #008000;">count=0,说明执行成功了。不管表里有没有数据</span>
- <span style="color: #0000ff;">if</span>(count == <span style="color: #800080;">0</span><span style="color: #000000;">) {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行成功===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">========count=%d</span><span style="color: #800000;">"</span><span style="color: #000000;">, count);
- } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行失败===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- }
- </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
- } </span>
(6) 加密密码
- <span style="color: #000000;">Action()
- {
- </span><span style="color: #0000ff;">char</span> sqlQuery[<span style="color: #800080;">1024</span>]; <span style="color: #008000;">//</span><span style="color: #008000;">1024是字符长度</span>
- <span style="color: #0000ff;">int</span><span style="color: #000000;"> count;
- </span><span style="color: #008000;">//</span><span style="color: #008000;">加密密码</span>
- lr_save_string(Change_to_Md5(<span style="color: #800000;">"</span><span style="color: #800000;">123456</span><span style="color: #800000;">"</span>), <span style="color: #800000;">"</span><span style="color: #800000;">pwd</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- sprintf(sqlQuery, </span><span style="color: #800000;">"</span><span style="color: #800000;">INSERT INTO lr_user(`mobile`, `pwd`, `dtime`) VALUES (‘%s‘, ‘%s‘, NOW());</span><span style="color: #800000;">"</span>, lr_eval_string(<span style="color: #800000;">"</span><span style="color: #800000;">135{phone}</span><span style="color: #800000;">"</span>), lr_eval_string(<span style="color: #800000;">"</span><span style="color: #800000;">{pwd}</span><span style="color: #800000;">"</span><span style="color: #000000;">));
- count </span>=<span style="color: #000000;"> lr_mysql_query(Mconn, sqlQuery);
- </span><span style="color: #008000;">//</span><span style="color: #008000;">count=0,说明执行成功了。不管表里有没有数据</span>
- <span style="color: #0000ff;">if</span>(count == <span style="color: #800080;">0</span><span style="color: #000000;">) {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行成功===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">========count=%d</span><span style="color: #800000;">"</span><span style="color: #000000;">, count);
- } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行失败===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- }
- </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
- }</span>
(7) 批量造数据
有两种办法,一种是按F4设置迭代次数,另一种是使用Controller设置虚拟用户数
打开Controller的Design,分别设置Start Vusers,Duration和Stop Vusers。注意批量造数据脚本用的是上面加密密码的脚本
运行后查看数据库的数据总数
在Controller的导航栏Results下点击Analyze Results,可以看到结果分析
如果想要添加图标,还可以点击Summary Report ==》Add New Item ==》Add New Graph
(8) 删除数据
- <span style="color: #000000;">Action()
- {
- </span><span style="color: #0000ff;">char</span> sqlQuery[<span style="color: #800080;">1024</span>]; <span style="color: #008000;">//</span><span style="color: #008000;">1024是字符长度</span>
- <span style="color: #0000ff;">int</span><span style="color: #000000;"> count;
- </span><span style="color: #008000;">//</span><span style="color: #008000;">删除数据</span>
- sprintf(sqlQuery, <span style="color: #800000;">"</span><span style="color: #800000;">DELETE FROM lr_user WHERE mobile = %s;</span><span style="color: #800000;">"</span>, <span style="color: #800000;">"</span><span style="color: #800000;">13508518632</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- count </span>=<span style="color: #000000;"> lr_mysql_query(Mconn, sqlQuery);
- </span><span style="color: #008000;">//</span><span style="color: #008000;">count=0,说明执行成功了。不管表里有没有数据</span>
- <span style="color: #0000ff;">if</span>(count == <span style="color: #800080;">0</span><span style="color: #000000;">) {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行成功===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">========count=%d</span><span style="color: #800000;">"</span><span style="color: #000000;">, count);
- } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {
- lr_output_message(</span><span style="color: #800000;">"</span><span style="color: #800000;">============脚本执行失败===========</span><span style="color: #800000;">"</span><span style="color: #000000;">);
- }
- </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
- }</span>
LoadRunner脚本开发:操作数据库(六)
标签:HERE web 添加 result save innodb one inf sub