zhuxiaoyan003 发表于 2010-1-6 16:25:18

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 编辑 ]

zhuxiaoyan003 发表于 2010-1-6 17:11:40

希望大家帮帮忙啊……不要总飘过

zhuxiaoyan003 发表于 2010-1-7 08:38:22

看的人多,回的人没有
是我写的不清楚还是各位也无法解决呢?

zhuxiaoyan003 发表于 2010-1-21 17:15:46

终于解决了参数化的问题
将select next row 设为unique,update value on 设置为 each iteration when out of value 设置为continue in a cyclic manner
就能在场景中跑过去了

zhuxiaoyan003 发表于 2010-1-21 17:16:54

可是生成结果的错误还没解决。不知道怎么回事
如果我研究出来了,会再写上来
如果有知道的,麻烦指点一下
页: [1]
查看完整版本: lr测试sql server数据库服务器问题