Domanda

Uso JMeter per testare la mia applicazione web. e il mio caso di test è quello di aggiungere un record nel database. e quindi imposto il "numero di thread utente" a 20, significa che simulerà 20 utenti che lavorano contemporaneamente. e quindi eseguo il test case. Ma alla fine ho scoperto che il sistema non ha creato 20 record nel database, ma ha semplicemente creato 13 record nel database.

Voglio sapere perché è successo? È possibile che, poiché nella mia applicazione Web, non ho aggiunto un "quotato sincronizzato" di fronte al metodo aggiungi record? Ho usato linq, se due utenti pubblicano una richiesta per creare un record sul server contemporaneamente, cosa accadrà? Basta creare un record o è possibile creare correttamente due record o sconosciuto?

Di seguito è riportato il codice di esempio per creare un record nel database:

       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;
        }
    }
È stato utile?

Soluzione

il database stesso dovrebbe essere compatibile con ACID, quindi dubito che il problema riguardi il database quando si tratta di sincronizzazione. se si inserisce un nuovo record e quel record è codificato da qualcosa come un numero intero auto-incrementante, il database non lo calpesterà a meno che non gli si dica di aggiornare con quell'id, piuttosto che inserire un nuovo record. ma dal momento che non stai scrivendo l'SQL, chissà davvero cosa stai dicendo al database di fare.

Suggerirei di rimuovere linq dall'equazione e di scriverlo manualmente. quello che stai testando sembra essere un semplice "upsert" operazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top