lr测试sql server数据库服务器问题
项目介绍:1.模拟人员进行项目中所有图幅数据上传后,对应修改数据库服务器中相关表的状态(修改mapgrid表中state的状态,往datastate表中插入记录)。
2.对项目(projectID)进行了参数化。即通过模拟n个人上传n个项目中的数据的操作,查看数据库服务器的表现。
大家看看我写的代码是否能够达到以上两点要求,欢迎提意见,目前有2个问题:
1. 在场景运行时,总出现违反在插入datastate表时报primary key 约束问题,为了解决这个问题,我写了delete sql语句,并且参数化了project表中的projectid,但是在场景运行时,还总出现违反在插入datastate表时报primary key 约束问题。
参数化原因:datastate表中Mapid 和 Layerid 分别与两个表Mapgrid 中的ID和Layer中的ID相对应,均是两个表的主键。
而Mapgrid中的ID又与该表中的ProjectID相关。即可能一个ProjectID对应n个Mapgrid表中的n个ID.
所以我参数化了Projectid。
其思想主要是:为了达到模拟n个虚拟用户,同时上传n个project中的m个图幅数据(MapID).
2. 在生成测试报告时,总报错,报错问题如图:,这个问题,有知道的解决方案的,请也说一下
lr.log("Create new Copmmand");
String connectionString_1000;
connectionString_1000 = "Data Source=192.168.11.172;Initial Catalog= EPMS_0714 ;User ID=sa";
SqlConnection SqlConnection_1000 = new SqlConnection(connectionString_1000);
SqlConnection_1000.Open();
SqlCommand SqlCommand_500 = new SqlCommand();
SqlCommand_500.Connection = SqlConnection_1000;
SqlCommand_500.CommandType = CommandType.Text;
//lr.log("查询MapGrid中ProjectID为"+lr.eval_string("752")+"的MapID");
SqlCommand_500.CommandText = "select ID from MapGrid where ProjectID =" + lr.eval_string("{NewParam}") + "";
List<int> mapids = new List<int>();
List<int> layerids = new List<int>();
SqlDataReader reader = SqlCommand_500.ExecuteReader();
while (reader.Read())
{
int ID11 = (int)reader;
mapids.Add(ID11);
}
reader.Close();
lr.start_transaction("delete");
// lr.log("删除DataState中ProjectID为"+lr.eval_string("752")+"中的MapID的记录");
for (int i=0; i<mapids.Count; ++i)
{
int IDmap = mapids;
SqlCommand_500.CommandText = "DELETE FROM DataState where MapID=" + IDmap.ToString();
SqlCommand_500.ExecuteNonQuery();
}
lr.end_transaction("delete", lr.AUTO);
SqlCommand_500.CommandText = "select ID from Layer ";
reader = SqlCommand_500.ExecuteReader();
while (reader.Read())
{
int ID11 = (int)reader;
layerids.Add(ID11);
}
reader.Close();
lr.rendezvous("insert");
lr.start_transaction("insert");
//lr.log("插入DataState中ProjectID为"+lr.eval_string("752")+"的MapID");
string sSQL = "INSERT INTO DataState(MapID, LayerID) values(";
string sTemp;
for (int i=0; i<mapids.Count; ++i)
{
int IDmap = mapids;
for(int j=0; j<layerids.Count; ++j)
{
int IDLayer = layerids;
sTemp = sSQL + IDmap.ToString() + "," + IDLayer.ToString() + ")";
SqlCommand_500.CommandText = sTemp;
SqlCommand_500.ExecuteNonQuery();
}
}
lr.end_transaction("insert", lr.AUTO);
lr.start_transaction("update");
// lr.log("更新DataState中ProjectID为"+lr.eval_string("752")+"的State状态");
for (int i=0; i<mapids.Count; ++i)
{
int IDmap = mapids;
SqlCommand_500.CommandText = "UPDATE MapGrid SET State='Uploaded' where ID=" + IDmap.ToString();
SqlCommand_500.ExecuteNonQuery();
}
lr.end_transaction("update", lr.AUTO);
SqlConnection_1000.Close();
SqlConnection_1000.Dispose();
[ 本帖最后由 zhuxiaoyan003 于 2010-1-6 16:28 编辑 ] 希望大家帮帮忙啊……不要总飘过 看的人多,回的人没有
是我写的不清楚还是各位也无法解决呢? 终于解决了参数化的问题
将select next row 设为unique,update value on 设置为 each iteration when out of value 设置为continue in a cyclic manner
就能在场景中跑过去了 可是生成结果的错误还没解决。不知道怎么回事
如果我研究出来了,会再写上来
如果有知道的,麻烦指点一下
页:
[1]