51Testing软件测试论坛

标题: 驱动SQL性能测试,关于update和insert into 的写法有什么不同 [打印本页]

作者: 曾淳淳    时间: 2015-12-3 17:36
标题: 驱动SQL性能测试,关于update和insert into 的写法有什么不同
本帖最后由 曾淳淳 于 2015-12-3 17:46 编辑

loadrunner 连MYsql 测试,更新和插入数据的写法有什么不同,按照教程,更新是可以执行了,但是改成insert into 执行就失败,为什么?求助....~~~
----------------------------------------------------------------------
贴出action部分的源代码:
Action()
{
        char chQuery[128];
        MYSQL *Mconn;
        lr_load_dll("libmysql.dll"); // 引入libmysql的dll

        Mconn = lr_mysql_connect(MYSQLSERVER, MYSQLUSERNAME, MYSQLPASSWORD, MYSQLDB, atoi(MYSQLPORT));//connection mysql

        //sprintf(chQuery, "update kk_commoditytype set typeName='衣服2' where typeId=1;");
        sprintf(chQuery, "inster into kk_commoditytype (`typeId`,`typeName`) values(`5`,`衣服2`);"           
);
               


        lr_mysql_query(Mconn, chQuery);//执行sql
        lr_mysql_disconnect(Mconn);// close connection

        return 0;
}

-------------------------
执行后提示:
Running Vuser...
Starting iteration 1.
Starting action Action.
Error -3: row not found 'inster into type (`type_id`,`type_name`) values(`55`,`衣服2`);' - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'inster into type (`type_id`,`type_name`) values(`55`,`衣服2`)' at line 1
C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): Error: C interpreter run time error: C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h (126):  Error -- memory violation : Exception ACCESS_VIOLATION received.
C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): Notify: CCI trace: C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): mysql_close(0x03913118)
.
C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): Notify: CCI trace: Action.c(16): lr_mysql_disconnect(0x03913118)
.
C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): Notify: CCI trace: Compiled_code(0): Action()
.
Ending Vuser...



作者: joe45    时间: 2015-12-4 10:54
你的sql语句可能需要转义, 参考一下我的:

//连接mysql库
Mconn=lr_mysql_connect(MYSQLSERVER,MYSQLUSERNAME,MYSQLPASSWORD,MYSQLDB,atoi(MYSQLPORT));

//方法在 Ptt_MySql.h 中, MYSQL *lr_mysql_connect(char *server, char *user, char *password, char *database, int port)

// 使用的mysql语句
sprintf(chQuery, "select * from tb_website_news_notice where 1=1 and type = '4' order by view_count DESC limit 2;");    //这里抓取2条
lr_mysql_query(Mconn, chQuery);

// 方法在 Ptt_MySql.h 中,  int lr_mysql_query(MYSQL *Mconn, char *query)

// 获取sql语句查询到的值,抓取需要的cell格; 这里抓取2列
lr_save_string(row[0][0].cell, "id");
lr_save_string(row[3][0].cell, "view_count");
lr_save_string(row[0][1].cell, "id1");
lr_save_string(row[3][1].cell, "view_count1");


// 判断,访问newsId做匹配, 选择性的写log
result=strcmp(lr_eval_string("{news}"),lr_eval_string("{id}")); //
if ( result == 0 )
{}

else
{}


作者: gaha    时间: 2015-12-4 10:55
是insert ,你语句写错了。
作者: joe45    时间: 2015-12-4 10:58
sql语句写错了
作者: jingzizx    时间: 2015-12-4 11:02
你语法错误,“inster ”应该是“insert”
作者: 曾淳淳    时间: 2015-12-4 11:23
jingzizx 发表于 2015-12-4 11:02
你语法错误,“inster ”应该是“insert”

insert 动到了,我重新贴下结果,因为还是不行,请指点:
Error -3: row not found 'insert into type ('type_id','type_name') values('55','111');' - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''type_id','type_name') values('55','111')' at line 1
C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): Error: C interpreter run time error: C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h (126):  Error -- memory violation : Exception ACCESS_VIOLATION received.
C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): Notify: CCI trace: C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): mysql_close(0x03ca0b70)
.
C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): Notify: CCI trace: Action.c(17): lr_mysql_discon
作者: 曾淳淳    时间: 2015-12-4 11:27
joe45 发表于 2015-12-4 10:54
你的sql语句可能需要转义, 参考一下我的:

//连接mysql库

这种写法我有试过,可以,但是抓取矩阵显示的写法有点繁琐。如果要抓取更多的数据有什么其他的写法可以推荐下么?
作者: 曾淳淳    时间: 2015-12-4 11:33
gaha 发表于 2015-12-4 10:55
是insert ,你语句写错了。

改了,运行结果我重新贴出来了,还是不行;
还有昨天运行update语句正常,就是中文更新到数据库里面显示为乱码;今天执行update语句,带中文就执行不了,提示找不到
-------------
sprintf(chQuery, "update type set type_name='衣服' where type_id=1;"
---------------
Starting action Action.
Error -3: row not found 'update type set type_name='衣服' where type_id=1;' - Incorrect string value: '\xD2\xC2\xB7\xFE' for column 'type_name' at row 1
C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): Error: C interpreter run time error: C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h (126):  Error -- memory violation : Exception ACCESS_VIOLATION received.
C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): Notify: CCI trace: C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): mysql_close(0x03880b70)
.
作者: gaha    时间: 2015-12-4 11:36
曾淳淳 发表于 2015-12-4 11:33
改了,运行结果我重新贴出来了,还是不行;
还有昨天运行update语句正常,就是中文更新到数据库里面显示 ...

错误不是不一样了吗?
把“衣服”改成"clothes",可以之后再解决中文编码问题。
作者: fhhh_eyou    时间: 2015-12-4 13:18
update是执行更新表中属性值信息;UPDATE TABLE_NAME  SET column_name1 = VALUE WHRER column_name2 = VALUE
insert是插入一个属性值信息; INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
作者: 曾淳淳    时间: 2015-12-4 13:55
gaha 发表于 2015-12-4 11:36
错误不是不一样了吗?
把“衣服”改成"clothes",可以之后再解决中文编码问题。

就是update语句中,不写衣服写clothes 运行成功,但是把clothes改成衣服会报错:
Error -3: row not found 'update type set type_name='衣服' where type_id=1;' - Incorrect string value: '\xD2\xC2\xB7\xFE' for column 'type_name' at row 1
C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h(126): Error: C interpreter run time error: C:\\Program Files (x86)\\HP\\LoadRunner\\include/Ptt_Mysql.h (126):  Error -- memory violation : Exception ACCESS_VIOLATION received.
以上是update的提示
------------------------------------------------------------------------------------
如果是insert 则提示:

Error -3: row not found 'insert into type ('type_id','type_name') values('55','111');' - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''type_id','type_name') values('55','111')' at line 1

作者: gaha    时间: 2015-12-4 14:05
曾淳淳 发表于 2015-12-4 13:55
就是update语句中,不写衣服写clothes 运行成功,但是把clothes改成衣服会报错:
Error -3: row not fou ...

你直接操作数据库的时候,插入有中文字符的记录能成功吗?如果能成功,就修改lr运行时里编码的内容,统一起来就可以了。
作者: 曾淳淳    时间: 2015-12-4 15:32
gaha 发表于 2015-12-4 14:05
你直接操作数据库的时候,插入有中文字符的记录能成功吗?如果能成功,就修改lr运行时里编码的内容,统一 ...

不能,插入后去查询数据库,也是乱码
----------------
刚看了一篇写
mysql_options(Mconn, MYSQL_SET_CHARSET_NAME, "GBK");
可解决字符集问题,但是没有写怎么用,一时没有找到解决办法
作者: 曾淳淳    时间: 2015-12-4 15:32
gaha 发表于 2015-12-4 14:05
你直接操作数据库的时候,插入有中文字符的记录能成功吗?如果能成功,就修改lr运行时里编码的内容,统一 ...

不能,插入后去查询数据库,也是乱码
----------------
刚看了一篇写
mysql_options(Mconn, MYSQL_SET_CHARSET_NAME, "GBK");
可解决字符集问题,但是没有写怎么用,一时没有找到解决办法
作者: 曾淳淳    时间: 2015-12-4 15:33
gaha 发表于 2015-12-4 14:05
你直接操作数据库的时候,插入有中文字符的记录能成功吗?如果能成功,就修改lr运行时里编码的内容,统一 ...

mysql_options(Mconn, MYSQL_SET_CHARSET_NAME, "GBK");
网上有一篇文章说这个可以解决字符集,但是没写怎么用
说把这个放在链接数据库语句前即可
作者: 曾淳淳    时间: 2015-12-4 15:57
joe45 发表于 2015-12-4 10:54
你的sql语句可能需要转义, 参考一下我的:

//连接mysql库

mysql_options(Mconn, MYSQL_SET_CHARSET_NAME, "GBK");
请问这个解决字符集问题的要怎么加进来?
作者: gaha    时间: 2015-12-4 16:37
曾淳淳 发表于 2015-12-4 15:32
不能,插入后去查询数据库,也是乱码
----------------
刚看了一篇写

说明你的数据库驱动编码本身就设置错了,默认是latin编码,不支持汉字。
你到mysql的官网下载一个客户端程序,链接你的库,然后找到表字段的属性,把需要汉字内容的字段改成gbk。


作者: 曾淳淳    时间: 2015-12-5 13:59
gaha 发表于 2015-12-4 16:37
说明你的数据库驱动编码本身就设置错了,默认是latin编码,不支持汉字。
你到mysql的官网下载一个客户端 ...

我也这么怀疑过,但是我将mysql的编码改成utf8,jbk,jb2312 结果都一样;
我用jmeter 执行结果是对的;
跟我下载的mysql lib库会不会有关系?
作者: gaha    时间: 2015-12-7 11:17
曾淳淳 发表于 2015-12-5 13:59
我也这么怀疑过,但是我将mysql的编码改成utf8,jbk,jb2312 结果都一样;
我用jmeter 执行结果是对的;
...

用客户端改最简单,自己钻研吧

作者: qq771405504    时间: 2016-3-4 13:43
joe45 发表于 2015-12-4 10:54
你的sql语句可能需要转义, 参考一下我的:

//连接mysql库

我没太看懂lr_save_string(row[0][0].cell,'..')  这部分的    数组不是没有声明怎么直接就能用,而且.cell是什么意思




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2