最近在写一个方便测试API的自动化工具,测试http各接口的返回值是否正确。
根据同事的一个工具改编了一下,当前的思路是:首先将各个接口从http获取结果返回string,分别做成一个函数,并且编译成一个dll文件。
制作测试用例:是制作了一个工具,可以从dll,添加函数,设置参数,并保存到xml文件中。每次都从xml文件中load参数(URL地址)接口名、参数。
执行测试用例:选中多个测试用例执行。执行结果返回http接口请求的返回值
在制作工具时碰到了一个问题,先列举出来给大家共享一下:
在执行批量测试用例时,无法查看已经执行完的用例结果。怎么办呢?怎么办呢?.net提供了BackgroundWorker,这个控件就可以解决这个问题了。这个控件就是让某些逻辑运行时同时可以对程序进行操作。
BackgroundWorker:常用的一些属性和方法如下:
事件:
a) Dowork:包含后台操作的主要逻辑代码。帮助文档中说确保在DoWork事件处理程序中不操作任何用户界面对象。而应该通过ProgressChanged和RunWorkerCompleted事件与用户界面进行通信,这个我没有想明白为什么,那位高手知道的一定要给我留言哦。
b) ProgressChanged:如果在后台操作执行过程中需要在UI上显示进度,那么进度条更新需写入ProgressChanged事件中。例:后台是一个批量操作,那么每执行完一个就需要与UI做交互更新进度条。
c) RunWorkerCompeleted:后台操作完成后进行的操作,可以UI的。
方法:
a) RunWorkerAsync:开始执行后台的线程,触发Dowork事件。
b) ReportProgress:触发ProgressChanged事件。当WorkerReportsProgress属性为True时,ReportProgress方法才能正常调用。
c) CancelAsync:请求取消挂起后台的操作,据官方说这里只是请求取消,只是将该backgroundworker的CancellationPending属性设置为false并不会终止后台操作。在后台操作中要检查CancellationPending属性,来决定是否要继续执行耗时的操作。可是本人查了好久资料都不知道什么时候后台操作中要检查CancellationPending属性,高手知道的也别忘了留言告诉我。
当WorkerSupportsCancellation属性为True时,CancelAsync方法才能正常调用。
事件和方法的参数详细说明:
void backgroundWorker1_ProgressChanged( Object^ sender,
ProgressChangedEventArgs^ e )
与
void ReportProgress(int percentProgress)
void ReportProgress(int percentProgress,Object^ userState)
在ReportProgress调用时,ProgressChanged事件被触发。同时ReportProgress可能会传两个参数给ProgressChanged事件,那么ProgressChanged事件中该如何使用呢?分别用e.ProgressPercentage和e.UserState.ToString()来获取。
backgroundWorker1.RunWorkerAsync(Text);
void backgroundWorker1_RunWorkerCompleted( Object^ sender,
RunWorkerCompletedEventArgs^ e )
void backgroundWorker1_DoWork( Object^ sender,
DoWorkEventArgs^ e )
RunWorkerAsync函数存在一个可选的参数,如果传入了该参数,那么我们可以在DoWork中通过e. Argument来访问该参数的值。
同时如果在DoWork事件中给e.Result赋过值那么我们就可以在RunWorkerCompleted中通过e.Result来访问该值。