我使用JMeter来测试我的Web应用程序。 我的测试用例是在数据库中添加一条记录。 然后我设置“线程用户数”到20,这意味着它将模拟20个用户同时工作。 然后我运行测试用例。 但最后我发现系统没有在数据库中创建20条记录,而只是在数据库中创建了13条记录。

我想知道为什么会这样? 是否有可能因为在我的网络应用程序中我没有添加“同步”按钮在添加记录方法面前?我用过linq,如果两个用户同时发一个请求给服务器创建一条记录,会发生什么?只需创建一条记录或者可以成功创建两条记录,还是未知?

以下是在数据库中创建记录的示例代码:

       public int SaveEventGroup(int id, Models.Entities.EventGroup e, Nullable<int> setpublish)
    {
        try
        {
            Entities.EventGroup db;
            if (id == 0)
            {
                db = new Entities.EventGroup();
                db.CreatedBy = e.CreatedBy;
                db.CreateDatetime = DateTime.Now;
                db.Status = true;
            }
            else
            {
                db = this.GetEventGroup(id);
            }

            db.NameCN = e.NameCN;
            db.NameEN = e.NameEN;
            db.NameZH = e.NameZH;
            db.NamePT = e.NamePT;
            db.DisplayOrder = GetGroupMaxDisplayOrder() + 1;

            if (setpublish == null)
            {
                db.PublishStatus = false;
                db.PublishDatetime = null;
                db.UpdateDatetime = DateTime.Now;
                db.UpdatedBy = e.UpdatedBy;
            }

            if (id == 0)
                dataContext.AddToEventGroupSet(db);

            dataContext.SaveChanges();

            return db.Id;
        }
        catch (Exception ex)
        {
            log.Error(ex.Message, ex);
            throw ex;
        }
    }
有帮助吗?

解决方案

数据库本身应该符合ACID,所以我怀疑数据库在同步方面存在的问题。如果你插入一个新的记录,并且该记录被一个类似自动递增的整数键入,那么除非你告诉它用该id更新,而不是插入一个新记录,否则数据库不会踩到它。但是既然你没有编写SQL,谁真正知道你指示数据库做什么。

我建议从等式中删除linq,然后手动写出来。您正在测试的内容似乎是一个非常简单的“upsert”。操作

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top