using iWareCommon.Utils; using iWareModel; using iWareTestForm.Utility; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace iWareTestForm { public partial class InterFaceTestForm : Form { AutoSizeFormClass asc = new AutoSizeFormClass(); delegate string GetSelectInterFaceCallBack(); delegate void Delegate_SetPostResult(int count, string content); delegate void Delegate_SetPost(int count, string param); string wipHost = BLLHelpler.GetConfigValue("wipHost"); /// /// 频率 /// private int callHZ = 1; /// /// 请求次数 /// private int requestCount = 0; /// /// 默认请求次数 /// private int default_requestCount = 200; private string curSelUrl = ""; private long totalUseTime = 0;//全部请求的时间和 public InterFaceTestForm() { InitializeComponent(); this.WindowState = FormWindowState.Maximized; Init(); } private void Init() { List itemList = GetItems(); foreach (var item in itemList) { comBox_InterFaces.Items.Add(item); } comBox_InterFaces.SelectedIndex = 0; this.tb_CallHZ.Text = "1000"; callHZ = 1; this.tb_RequestCount.Text = default_requestCount.ToString(); requestCount = default_requestCount; this.tb_timestamp.Text = SimulatorCommonHelper.GetTimeStampWithlocals(); } private void btn_Test_Click(object sender, EventArgs e) { InitData(); Post(1); } private void Post(int count) { string param = this.tb_Params.Text.Trim(); #region POST请求 try { string url = GetSelectInterFace(); string result = RealPost(wipHost, url, param, count); ShowResult(count, string.Format("第{0}次请求返回结果{1}", count.ToString(), result)); } catch (Exception ex) { MessageBox.Show("出现异常:" + ex.Message); return; } #endregion } /// /// 性能测试 /// /// /// private void btn_performanceTest_Click(object sender, EventArgs e) { InitData(); string param = this.tb_Params.Text.Trim(); //*/ try { totalUseTime = 0; callHZ = Convert.ToInt32(this.tb_CallHZ.Text.Trim()); requestCount = Convert.ToInt32(this.tb_RequestCount.Text.Trim()); } catch (Exception ex) { MessageBox.Show("出现异常:" + ex.Message); return; } if (!this.cb_timestamp.Checked) {//时间戳不突变 if (this.tb_timestamp.Text.Trim() == string.Empty) { MessageBox.Show("时间戳不突变的情况下,时间戳不能为空!"); this.tb_timestamp.Focus(); return; } } ParameterizedThreadStart paramStart = new ParameterizedThreadStart(PerformanceTest); Thread thread = new Thread(paramStart); Object obj = param; thread.Start(obj); } private void PerformanceTest(object param) { string url = GetSelectInterFace(); DateTime bgtime = DateTime.Now; var timestamp = ""; string start_timestamp = "", end_timestamp = "";//开始和结束时间戳 for (int i = 1; i < requestCount + 1; i++) { if (i != 1) Thread.Sleep(callHZ); var str_param = param.ToString(); if (this.ckb_ParamChange.Checked) {//参数突变 str_param = str_param.Replace("$MutationParam$", Guid.NewGuid().ToString().Substring(0, 5)); } if (this.cb_timestamp.Checked) {//时间戳突变 timestamp = SimulatorCommonHelper.GetTimeStampWithlocals(); } else {//时间戳不突变 timestamp = this.tb_timestamp.Text.Trim(); } str_param = str_param.Replace("$timestamp$", timestamp); if (i == 1) { start_timestamp = timestamp; } else if (i == requestCount) { end_timestamp = timestamp; } MyMethod(bgtime, start_timestamp, end_timestamp, i, str_param, url); //SetPostResult22(i, "异步方法" + i.ToString() + "调用完成"); } } /// /// 获取接口下拉 /// /// private string GetSelectInterFace() { //多线程调用时要查检控件的InvokeRequired,若未在其他线程中访问,可直接赋值。若在调用,要用Invoke来调用代理完成。 if (this.comBox_InterFaces.InvokeRequired) { GetSelectInterFaceCallBack callBack = new GetSelectInterFaceCallBack(GetSelectInterFace); return this.Invoke(callBack).ToString(); } else { return (this.comBox_InterFaces.SelectedItem as ListItem).Value; } } /// /// 显示请求结果 /// /// /// private void ShowResult(int count, string content) { if (this.tb_PostResult.InvokeRequired) { Delegate_SetPostResult delegate_SetPostResult = new Delegate_SetPostResult(ShowResult); this.Invoke(delegate_SetPostResult, new object[] { count, content }); } else { content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + content + " \r\n"; this.tb_ResponseResult.Text = this.tb_ResponseResult.Text + content; } } /// /// 显示请求信息 /// /// /// private void ShowPostInfo(int count, string param) { if (this.tb_PostResult.InvokeRequired) { Delegate_SetPost delegate_SetPostResult = new Delegate_SetPost(ShowPostInfo); this.Invoke(delegate_SetPostResult, new object[] { count, param }); } else { string content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " 第" + count.ToString() + "次请求... \r\n"; content += "参数:" + param + "\r\n"; this.tb_PostResult.Text = this.tb_PostResult.Text + content; } } #region 异步方法 private async Task MyMethod(DateTime bgtime, string start_timestamp, string end_timestamp, int i, string param, string url) { string r = await Task.Run(() => { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); //var startTime = WIPCommon.ForamtCurDateTimeWithF(); string result = RealPost(wipHost, url, param, i); //var endTime = WIPCommon.ForamtCurDateTimeWithF(); stopWatch.Stop(); ShowResult(i, string.Format("第{0}次请求返回结果{1}", i.ToString(), result)); ShowResult(i, string.Format("第{0}次请求结束,用时:" + stopWatch.ElapsedMilliseconds.ToString() + "(毫秒)", i.ToString())); totalUseTime += stopWatch.ElapsedMilliseconds; return result; //return (i * 2).ToString(); }); //ShowResult(i, string.Format("异步方法{0}执行完毕,结果{1}", i.ToString(), r)); if (i == requestCount) { ShowResult(i, "请求结束,总用时:" + (DateTime.Now - bgtime).TotalMilliseconds.ToString() + "(毫秒),平均用时:" + (totalUseTime / requestCount).ToString("0") + "(毫秒)" + ",【开始时间戳:" + start_timestamp + ",结束时间戳:" + end_timestamp + "】" + ",【查询开始时间戳:" + (Convert.ToInt64(start_timestamp) - 1).ToString() + "000,查询结束时间戳:" + (Convert.ToInt64(end_timestamp) + 1).ToString() + "000】"); } return r; } #endregion private string RealPost(string host, string url, string param, int count) { return ""; /* string result = ""; try { ShowPostInfo(count, param); //result = new HTTPService(host).postContentForString(url, param, new Guid()); result = new HTTPLongConnectionService2().postContentForString(url, param); } catch (Exception ex) { result = string.Format("请求出现异常,ex:{0},参数->host:{1},url:{2},param:{3},count:{4}", JsonConvert.SerializeObject(ex), host, url, param, count.ToString()); } return result; //*/ } private void btn_Stop_Click(object sender, EventArgs e) { requestCount = 0; this.btn_performanceTest.Enabled = true; this.btn_Test.Enabled = true; } #region 公共方法 /// /// 获取完整地址 /// /// /// private string GetURL(string url) { return wipHost + url; } private List GetItems() { List list = new List(); InterfaceSection services = InterfaceSection.GetConfig(); foreach (TheKeyValue item in services.KeyValues) { list.Add(new ListItem() { Text = item.Name, Value = item.Url }); } return list; } private void InitData() { this.tb_PostResult.Text = ""; this.tb_ResponseResult.Text = ""; //this.btn_performanceTest.Enabled = false; //this.btn_Test.Enabled = false; if (this.comBox_InterFaces.SelectedIndex == -1) { MessageBox.Show("请选择接口!"); return; } curSelUrl = GetSelectInterFace(); this.lbl_URL.Text = GetURL(curSelUrl); } #endregion private void comBox_InterFaces_SelectedIndexChanged(object sender, EventArgs e) { try { curSelUrl = GetSelectInterFace(); this.lbl_URL.Text = GetURL(curSelUrl); var selItem = (ListItem)this.comBox_InterFaces.SelectedItem; if (selItem != null) { string json = JsonFileHelper.ReadJson(@"Templete\" + selItem.Text + ".json"); //json = json.Replace("$timestamp$", CommonHelper.GetTimeStampWithlocals()); json = json.Replace("$testValue$", "test"); this.tb_Params.Text = json; } } catch (Exception ex) { MessageBox.Show("出现错误:" + ex.Message); } } private void InterFaceTestForm_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); } private void tb_PostResult_TextChanged(object sender, EventArgs e) { tb_PostResult.SelectionStart = tb_PostResult.Text.Length; tb_PostResult.ScrollToCaret(); } private void tb_ResponseResult_TextChanged(object sender, EventArgs e) { tb_ResponseResult.SelectionStart = tb_ResponseResult.Text.Length; tb_ResponseResult.ScrollToCaret(); } private void InterFaceTestForm_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } private void btn_Close_Click(object sender, EventArgs e) { this.Close(); } private void btn_NewTimeStamp_Click(object sender, EventArgs e) { this.tb_timestamp.Text = SimulatorCommonHelper.GetTimeStampWithlocals(); } } }