Example #1
0
        static void Main(string[] args)
        {
            var     cfg = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, "config.json"));
            JObject jo  = (JObject)JsonConvert.DeserializeObject(cfg);

            var ip                 = CodeHelper.GetIP(jo["IP"].ToString());
            var port               = jo["PORT"].ToString();
            var pwd                = TokenHelper.Md5(jo["PASSWORD"].ToString());
            var numberOfRuns       = Convert.ToInt32(jo["NUMBEROFRUNS"].ToString()); // 最大运行次数
            var accountFile        = jo["ACCOUNTFILE"].ToString();
            var accountDetailFile  = jo["ACCOUNTDETAILFILE"].ToString();
            var timeTableId        = jo["TIMETABLEID"].ToString();
            var classId            = jo["CLASSID"].ToString();
            var accounts           = File.ReadAllLines(Path.Combine(Environment.CurrentDirectory, accountFile));
            var teachingPlanId     = jo["TEACHINGPLANID"].ToString();
            var resourceId         = jo["RESOURCEID"].ToString();
            var mqIp               = jo["MQIP"].ToString();
            var mqPort             = jo["MQPORT"].ToString();
            var mqUserName         = jo["MQUSERNAME"].ToString();
            var mqPassword         = jo["MQPASSWORD"].ToString();
            var serverExchangeName = jo["SERVEREXCHANGENAME"].ToString();

            //var maxDegreeOfParallelism = Convert.ToInt32(jo["CONCURRENT"].ToString());
            MQHelper.CreateMqConnection(mqIp, mqPort, mqUserName, mqPassword);
            ConcurrentDictionary <string, string> cd = new ConcurrentDictionary <string, string>();
            BlockingCollection <MData>            bc = new BlockingCollection <MData>();

            // 装置 AccountId 与 Account 的关系
            var accountDetails = File.ReadAllLines(Path.Combine(Environment.CurrentDirectory, accountDetailFile));

            foreach (var item in accountDetails)
            {
                var arr = item.Split('\t');
                cd.TryAdd(arr[1], arr[0]);
            }

            var r = new Random((int)DateTime.Now.ToFileTimeUtc());
            var accountIndexArray = new int[numberOfRuns];

            for (var i = 0; i < numberOfRuns; i++)
            {
                accountIndexArray[i] = r.Next(0, accounts.Length - 1);
            }

            var taskList      = new Task[numberOfRuns];
            var startDateTime = $"[{ DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")}]";

            for (var i = 0; i < numberOfRuns; i++)
            {
                int k = i;
                taskList[i] = new Task(() =>
                {
                    var account = string.Empty;
                    account     = accounts[accountIndexArray[k]];
                    var url     = $"http://{ip}:{port}/oauth2/login.html?client_id=1&response_type=code&username={account}&password={pwd}";
                    SocketHttpHelper.SocketHttpPost(ip, port, url, out string status, out string data);
                    LogHelper.OutputDebugString($"[{k}]{status}, {data}");

                    if (status == SocketHttpHelper.HttpState.S200)
                    {
                        JObject __jo = JsonConvert.DeserializeObject <JObject>(data);
                        try
                        {
                            var t = __jo["code"].ToString() + __jo["state"].ToString();

                            var code             = __jo["code"].ToString(); // 取得CODE
                            var state            = __jo["state"].ToString();
                            string client_secret = "111";
                            string baseUrl       = "http://" + ip + ":" + port;
                            string tokenUrl      = baseUrl + "/oauth2/token";
                            string redirect_uri  = baseUrl + "/oauth2/getToken.do";
                            var refreshToken     = string.Empty;

                            var body = $"grant_type=authorization_code&client_id=1&client_secret={client_secret}&refresh_token={refreshToken}&username={account}&redirect_uri={redirect_uri.Replace("&", "%26%")}&code={code}&state={state}";
                            SocketHttpHelper.SocketHttpPost(ip, port, tokenUrl, body, out status, out data);
                            LogHelper.OutputDebugString($"[{k}]{status}, {data}");

                            // 保存有效数据,用于之后的并发测试
                            if (status == SocketHttpHelper.HttpState.S200)
                            {
                                var joAccessToken = JsonConvert.DeserializeObject <JObject>(data);
                                var accessToken   = joAccessToken["access_token"].ToString();
                                refreshToken      = joAccessToken["refresh_token"].ToString();
                                bc.Add(new MData
                                {
                                    AccessToken  = accessToken,
                                    RefreshToken = refreshToken,
                                    Code         = code,
                                    State        = state,
                                    Account      = account,
                                    AccountId    = cd[account],
                                    ClassId      = classId,
                                    TimeTableId  = timeTableId
                                });
                            }
                        }
                        catch { }
                    }
                });
            }

            Console.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")}]开始获取Code、AccessToken...");
            taskList.ToList().ForEach(a => a.Start());
            //Parallel.For(0, taskList.Length, new ParallelOptions { MaxDegreeOfParallelism = maxDegreeOfParallelism }, i => { taskList[i].Start(); });

            Task.WaitAll(taskList, 1000 * 60 * 10); // 最长等待10分钟
#if true
            #region 并发测试MQ(考勤)
            var bcTaskList   = bc.ToList();
            var mqKaoQinTask = new Task[bcTaskList.Count];

            for (var i = 0; i < bcTaskList.Count; i++)
            {
                var k = i;
                mqKaoQinTask[i] = new Task(() => {
                    var a    = bcTaskList[k];
                    var jObj = new JObject();
                    jObj.Add(new JProperty("studentAccountId", a.AccountId));
                    jObj.Add(new JProperty("timeTableId", a.TimeTableId));
                    jObj.Add(new JProperty("wifiName", "Wifi-liuzhenhua"));
                    jObj.Add(new JProperty("checkWorkStatus", "2"));
                    jObj.Add(new JProperty("checkWorkTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
                    jObj.Add(new JProperty("classId", a.ClassId));
                    jObj.Add(new JProperty("tocken", a.AccessToken));
                    var jsonPostData = jObj.ToString();
                    LogHelper.OutputDebugString($"MQ::{jsonPostData}");
                    MQHelper.sentMsgToMQqueue("checkwork", jsonPostData);
                });
            }
            ;
            Console.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")}]开始并发测试MQ(考勤)...");
            mqKaoQinTask.ToList().ForEach(a => a.Start());
            //Parallel.For(0, mqKaoQinTask.Length, new ParallelOptions { MaxDegreeOfParallelism = maxDegreeOfParallelism }, i => { mqKaoQinTask[i].Start(); });

            Task.WaitAll(mqKaoQinTask, 1000 * 60 * 5); // 最长等待5分钟
            #endregion

            #region 并发测试MQ(举手发言)
            var mqJuShouFaYanTask = new Task[bcTaskList.Count];
            for (var i = 0; i < bcTaskList.Count; i++)
            {
                var k = i;
                mqJuShouFaYanTask[i] = new Task(() => {
                    var a    = bcTaskList[k];
                    var jObj = new JObject();

                    jObj.Add(new JProperty("Course_ID", teachingPlanId));
                    jObj.Add(new JProperty("Time_Table_ID", a.TimeTableId));
                    jObj.Add(new JProperty("Account_ID", a.AccountId));
                    jObj.Add(new JProperty("accessToken", a.AccessToken));

                    var jsonPostData = jObj.ToString();
                    LogHelper.OutputDebugString($"MQ::{jsonPostData}");
                    MQHelper.sentMsgToMQqueue("student_speak", jObj.ToString());
                });
            }
            ;
            Console.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")}]开始并发测试MQ(举手发言)...");
            mqJuShouFaYanTask.ToList().ForEach(a => a.Start());
            //Parallel.For(0, mqJuShouFaYanTask.Length, new ParallelOptions { MaxDegreeOfParallelism = maxDegreeOfParallelism }, i => { mqJuShouFaYanTask[i].Start(); });

            Task.WaitAll(mqJuShouFaYanTask, 1000 * 60 * 5); // 最长等待5分钟
            #endregion

            #region 并发测试MQ(回答问题)
            var mqHuiDaWenTiTask = new Task[bcTaskList.Count];
            for (var i = 0; i < bcTaskList.Count; i++)
            {
                var k = i;
                mqHuiDaWenTiTask[i] = new Task(() => {
                    var a    = bcTaskList[k];
                    var jObj = new JObject();

                    jObj.Add(new JProperty("Time_Table_ID", a.TimeTableId));
                    jObj.Add(new JProperty("Resource_ID", resourceId));
                    jObj.Add(new JProperty("Course_ID", teachingPlanId));
                    jObj.Add(new JProperty("Account_ID", a.AccountId));
                    jObj.Add(new JProperty("Answer_Time", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
                    jObj.Add(new JProperty("type", "1"));
                    jObj.Add(new JProperty("accessToken", a.AccessToken));

                    var jsonPostData = jObj.ToString();
                    LogHelper.OutputDebugString($"MQ::{jsonPostData}");
                    string routingKey = "tea.question.courseId." + a.TimeTableId;
                    MQHelper.sentMsgToMQ(routingKey, jsonPostData, serverExchangeName);
                });
            }
            ;
            Console.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")}]开始并发测试MQ(回答问题)...");
            mqHuiDaWenTiTask.ToList().ForEach(a => a.Start());
            //Parallel.For(0, mqHuiDaWenTiTask.Length, new ParallelOptions { MaxDegreeOfParallelism = maxDegreeOfParallelism }, i => { mqHuiDaWenTiTask[i].Start(); });

            Task.WaitAll(mqHuiDaWenTiTask, 1000 * 60 * 5); // 最长等待5分钟
            #endregion
#endif
            var s = $"Run from {startDateTime} to [{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")}], 总运行次数:{numberOfRuns}. All of task finished. Press enter to exit.";
            LogHelper.OutputDebugString(s);
            Console.WriteLine(s);
            Console.ReadLine();
            Environment.Exit(0);
        }
Example #2
0
        static void Main(string[] args)
        {
            var     cfg = File.ReadAllText(Path.Combine(Environment.CurrentDirectory, "config.json"));
            JObject jo  = (JObject)JsonConvert.DeserializeObject(cfg);

            LogHelper.StartService();

            var classId      = "64c01042e1e64d23812768196ff012f6";
            var timeTableId  = "30b35e08dab04a5a88198b3ccb4cac73";
            var accountId    = "li_003";
            var accessToken  = "ACC-ESS-TOKEN-2020";
            var T_T_T_BH     = "DEMO-TTT-BH";
            var url          = jo["URL"].ToString();
            var numberOfRuns = Convert.ToInt32(jo["NUMBEROFRUNS"].ToString());   // 最大运行次数
            var mqIp         = jo["MQIP"].ToString();
            var mqPort       = jo["MQPORT"].ToString();
            var mqUserName   = jo["MQUSERNAME"].ToString();
            var mqPassword   = jo["MQPASSWORD"].ToString();

            Task[] mqKaoQinTask = new Task[numberOfRuns];
            MQHelper.CreateMqConnection(mqIp, mqPort, mqUserName, mqPassword);

            var wsObj = WebServiceHelper.GetObject(url);

            bool isExitTask = false;

            for (var i = 0; i < numberOfRuns; i++)
            {
                var k = i;
                mqKaoQinTask[i] = new Task(() => {
                    // 获取上课信息
                    string[] param = new string[] { accountId, "21", accessToken };

                    LogHelper.Trace($"param::accountId:{param[0]},applicationType:{param[1]},accessToken:{param[2]}");
                    //var s = WebServiceHelper.CallMethod(url, "getCourseInfoWhenStudentLoginInfo", param);
                    var s = WebServiceHelper.CallMethod(wsObj, "getCourseInfoWhenStudentLoginInfo", param);
                    LogHelper.Trace(s);
                    // 考勤
                    var jObj = new JObject();
                    jObj.Add(new JProperty("studentAccountId", accountId));
                    jObj.Add(new JProperty("timeTableId", timeTableId));
                    jObj.Add(new JProperty("wifiName", "Wifi-liuzhenhua"));
                    jObj.Add(new JProperty("checkWorkStatus", "2"));
                    jObj.Add(new JProperty("checkWorkTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
                    jObj.Add(new JProperty("classId", classId));
                    jObj.Add(new JProperty("tocken", accessToken));
                    var jsonPostData = jObj.ToString();
                    LogHelper.OutputDebugString($"MQ::{jsonPostData}");
                    MQHelper.sentMsgToMQqueue("checkwork", jsonPostData);
                });
            }
            ;
            Console.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")}]开始并发测试MQ(考勤)...");
            mqKaoQinTask.ToList().ForEach(a => a.Start());
            #region 考勤统计
            Task.Run(() =>
            {
                while (!isExitTask)
                {
                    string method2  = "getCheckWorkStatistics";
                    string[] param2 = new string[] { timeTableId, T_T_T_BH, accessToken };
                    LogHelper.Trace("param::timeTableId:{0},T_T_T_BH:{1},token:{2}", param2[0], param2[1], param2[2]);
                    var s2 = WebServiceHelper.CallMethod(url, method2, param2);
                    LogHelper.Trace(s2);
                    LogHelper.Trace("Sleep 5000 ms.");
                    Thread.Sleep(5000);
                }
            });
            #endregion
            Task.WaitAll(mqKaoQinTask, 1000 * 60 * 5); // 最长等待5分钟
            isExitTask = true;
            Console.WriteLine($"[{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff")}]完成...");
            LogHelper.Stop();
        }