C#借助API实现黑盒自动化测试工具编写知识库

下面做一个简单的演示。为了简便起见,假设存在这样一个应用程序:

1:提供一个WINFORM窗体,上面存在一个TextBox,以及一个Button;

2:点击Button,会弹出提示框,提示框内容为TextBox的值;

现在,测试要求如下:

1:在300台机器上运行上面的程序;

2:到这300台机器上去点击这个Button,看看上文中的功能2有没有实现;

很显然,实际情况中没有这么简单的程序,实际的情况有可能是点击Button,统一下载一个文件,而测试的要求可能就变为考核服务器的负载。现在,测试部显然也没有300个人坐在客户机上验证测试的结果,这个时候,就需要我们提供一个自动化的测试工具,来完成必要的测试任务。

测试工具,首先也是一个C#的程序,它的主要目的是:

1:获取上文应用程序的窗口句柄,继而获取TextBox句柄及Button句柄;

2:为TextBox随机填入一些字符;

3:模拟点击Button;

1.1:EnumChildWindows介绍

在这里需要介绍下EnumChildWindows,

EnumChildWindows可是个好东西,可以枚举一个父窗口的所有子窗口:

BOOLEnumChildWindows(HWNDhWndParent,//handletoparentwindow//父窗口句柄WNDENUMPROClpEnumFunc,//callbackfunction//回调函数的地址LPARAMlParam//application-definedvalue//你自已定义的参数);就这么简单,让我们再定义一个回调函数,像下面这样:

BOOLCALLBACKEnumChildProc(HWNDhwnd,//handletochildwindowLPARAMlParam//application-definedvalue);在调用EnumChildWindows这个函数时,直到调用到最个一个子窗口被枚举或回调函数返回一个false,否则将一直枚举下去。

1.2:简单例子的主要源码

测试工具的主要代码如下:

2:难点:如何获取指定的控件句柄

细心的人可能已经发现,上文中,给文本框赋值的地方,使用了如下代码:

foreach(IntPtriteminlistWnd){if(item!=hwnd_button){char[]UserChar="luminji".ToCharArray();foreach(charchinUserChar){SendChar(item,ch,100);}}}假设我们的窗体上有多个文本框,那么事实上,这段代码会给所有的文本框输入"luminji”字样。这在多数应用程序中都是不允许的,我们需要精确定位需要控制的控件。

我们在得到OK按钮的句柄的时候,使用了函数:

IntPtrhwnd_button=FindWindowEx(mainWnd,newIntPtr(0),null,"OK");而想要获取文本框句柄的时候,这个函数却不能使用,因为,所有文本框都是没有标题的,也就是类似"OK"这个值。有人说,那就使用控件ID吧。且看:

2.1:获取控件ID

非.NET程序,一旦程序被生成,控件ID就是固定的,所以这一招,用在非.NET程序中,那是再好也不过了。

[DllImport("user32.dll",EntryPoint="GetDlgItem")]publicstaticexternIntPtrGetDlgItem(IntPtrhParent,intnIDParentItem);其中,第一个参数就是窗体的句柄,第二个参数就是控件ID。

但是,显然,这种方法不适用于我们的.NET程序,因为我们会发现,我们的.NET程序没运行一次,这个ID是变化的。

2.2:获取控件位置

EnumChildWindows(mainWnd,newCallBack(delegate(IntPtrhwnd,intlParam){listWnd.Add(hwnd);StringBuilderclassName=newStringBuilder(126);StringBuildertitle=newStringBuilder(200);GetWindowText(hwnd,title,200);RECTclientRect;GetClientRect(hwnd,outclientRect);intcontrolWidth=clientRect.Width;intcontrolHeight=clientRect.Height;intx=0,y=0;IntPtrparerntHandle=GetParent(hwnd);if(parerntHandle!=IntPtr.Zero){GetWindowRect(hwnd,outclientRect);RECTrect;GetWindowRect(parerntHandle,outrect);x=clientRect.X-rect.X;y=clientRect.Y-rect.Y;Debug.Print(x.ToString());Debug.Print(y.ToString());}returntrue;}),0);好了,现在的关键就是怎么取得这个控件的位置。我们在VS中查看,某个控件有X坐标和Y坐标,以上面程序的这个TextBox来说,其在VS中显示的位置是“70,83”,但是而VS中显示的,是不包含标题和边框的坐标值。但是这个坐标值可以作为我们人工比对的参考。

更精确的坐标值,我们写代码来实现,如下:

注意,上面代码中的X和Y就是某个控件的精确的X和Y值,记录下来,比对一下,我们就能得到精确的坐标值了。在上文的例子中,我们的文本框的坐标最终得到为“78,113”。

有了这个坐标值,我们便知道这个控件的句柄,也就是hwnd是属于哪个控件的了。

2.3:根据EnumChildWindows枚举次序得到句柄

如果你不想这么麻烦,还有一种简单的方案,那就是利用EnumChildWindows的枚举顺序。要知道,在不同的机器上,EnumChildWindows枚举一个窗体上子控件的顺序是相同的,也就是说,如果有两个文本框,它们在这台机器上被枚举的顺序一个是2,一个是3,那么,它们在其它机器上被枚举的顺序,也是这个固定次序。通过比对,我们也能得到它们各自的句柄。当然,如果我们有了这些句柄,还有什么是不能做到的呢

2.4:使用SPY++

SPY++是微软的一个工具,用户获取窗体上的ID或者类型或者句柄等信息。因为在我们的这个例子里,ID和句柄在每台机器上都是不变的,所以这个工具对于我们来说,没有多大的用处。但是,当你HACK别人的程序的时候,它会发挥一定作用。

THE END
1.对PHP源码的测试php源码检测从2月24号左右,开始从源码阅读并且二改,由于中途网站需要备案就隔了一个星期多没搞了,直到今早起来看到信息,备案通过了,吃完饭就开始改,终于在下午全部测试完成! 我看了一下原作者用的是MDUI+腾讯云的服务器,MDUI是0.4.2版本,现在MDUI更新到了1.0.1了,不过不影响基本的功能,于是开始搭建并且测试功能。 https://blog.csdn.net/qq_53325717/article/details/129324105
2.怎么测试php源码?Worktile社区1. 单元测试框架:选择适合的单元测试框架,比如PHPUnit,来编写和运行PHP源码的单元测试。使用单元测试框架可以对PHP代码的功能进行测试,确保代码行为符合预期。 四、功能测试1. 编写测试用例:根据PHP源码的功能特点,编写相应的功能测试用例。测试用例应该覆盖尽可能多的场景,以验证PHP源码的正确性。 五、性能测试1. https://worktile.com/kb/ask/102968.html
3.网页测试Java代码测试网页源码mob6454cc623087的技术博客网页测试Java代码 测试网页源码 网站有错误代码?不兼容?有时候就在状态栏显示错误,代码很长挨个看实在头疼。于是百度一下,狂搜网页错误在线检测工具,结果还真发现了不少,把用过的工具进行了整理,分网页代码测试、网页兼容性、网速测试、seo优化四大类收集了30多个可以在线测试网页的工具,推荐也收藏一下,以后备用。https://blog.51cto.com/u_16099170/9146276
4.个人源码测试数据可视化中心 将文件拖到此处,或点击上传 只能上传csv文件,且不超过500MBhttp://www.china1.fun/
5.php最新版微测试源码v1.02源码下载适用范围: 微应用平台源码APP微博应用程序,微趣源码,微趣应用平台,微测试源码 运行环境: PHP、MYsql 其他说明:最新微应用平台源码,无后台(后台也没用),不用数据库,支持腾讯QQ空间,支持关注认证空间,共60多个测试~~ 之前我们也首发了2012微趣应用平台/微趣源码/APP微博应用程序/微应用平台源码,是微博登录的,这次发布https://www.jb51.net/codes/89769.html
6.最新周易测算系统源码完美运行(无需授权)新版测算系统海外多语言源码 2024-09-18 PHP姓名配对测试源码 2024-07-16 最新周易测算系统源码完美运行(无需授权) 2024-07-03 最新测算塔罗源码/算命源码(可以运营) 2023-08-12 星座运势在线查看网站开源源码 2023-03-29 2022在线算命网站源码(周易测算h5源码) 2022-09-22 (最新开运网)算命网/周公八字婚姻预测https://www.huizhanii.com/34714.html
7.搬运FAQ丨《数码宝贝:源码》链接测试须知数码宝贝源码吧各位被选召者们好,《数码宝贝:源码》「链接测试」将于12月12日10:00正式启动!为了帮助大家更好地了解本次测试,请仔细阅读以下【测试须知】。Q:本次测试的具体信息A:测试时间为12月12日10:00至12月19日22:00,测试期间不开放充值服务,测试结束后所有游戏数据将被清除。Q:如何获得本次测试的资格?A:12月12日https://tieba.baidu.com/p/9322273574
8.搜狐视频解析源码测试时间:2024.09.18搜狐视频解析源码【测试时间:2024.09.18】 此内容为付费资源,请付费后查看 ¥588 VIP¥538SVIP¥388 立即购买 您当前未登录!建议登陆后购买,可保存购买订单,凭订单享受售后更新服务 付费资源介绍 搜狐视频解析源码,PHP代码,支持mp4和m3u8解析,mp4可免VIP账号cookie,高清画质;m3u8会员视频需配置VIP账号cookie,支持多账号https://www.leafone.cn/315.html
9.数码宝贝源码链接测试资格怎么获取链接测试资格获取方法数码宝贝源码是一款童年经典的养成冒险回合制游戏,游戏采取了次世代PBR写实风格数码宝贝和奇幻数码世界风格,给玩家们带来全新的玩法体验,游戏在今日上线了链接测试的活动,玩家们对这个测试资格的获取方法也是比较关注的,下面就让小编给大家带来《数码宝贝源码》链接测试资格获取方法,一起来看看吧。 https://shouyou.3dmgame.com/gl/541580.html
10.单元测试Parasoft中国官网验证目标代码中无错误,并且遵循相关安全标准。而在测试驱动开发(TDD)环境中,代码功能和质量保持不变,所以不用担心需要对已有代码的更改。https://www.parasoftchina.cn/solutions/unit-testing/
11.我个人的LinuxTCPserver和client测试源码,C语言(2)(★firecat简介:我个人的Linux TCP server和client测试源码,C语言(2)(★firecat推荐★) 二、echo源码2如下,main.c #include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/epoll.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <sys/rehttps://developer.aliyun.com/article/803527
12.通达信几天几板行情排序指标副图源码测试图通达信公式指标引用到GPJYVALUE交易类数据,需要下载专业财务数据才能使用 去除ST和停牌:=NOT(NAMELIKE('S') OR NAMELIKE('*S')) AND VOL1; ZDF:=IF(INBLOCK('创业板'), 0.2, IF(INBLOCK('科创板'),0.2,IF(INBLOCK('ST板块'), http://www.gszx.com.cn/html/tongdaxingongshi/gs280602.html
13.AI面相测试源码AI面相手相大师小程序源码最新版AI面相测试源码安装前准备的资料1、微信公众号(认证服务号)2、服务器3、备案域名解析4、申请支付5、AI人脸识别接口自行申请 AI面相测试源码安装环境Linuxphp 5.6+mysql 5.6 AI智能面相——2019现象级、刷屏级全网爆红产品AI人工智能算法PK传统线上风水吸金行业 https://www.songma.com/product/view138762.html
14.干货!手把手教小白批量制造测试数据!(附源码)(附源码) 造数据核心思想 在性能测试的工作中,我们经常会遇到造数据的需求,这个工作可以让开发同学来配合,但这必定还要看开发同学的脸色行事!遇到nice的开发同学自然工作顺利,但是遇到配合度不高的开发同学,往往需要协调领导来促成此事,这就比较麻烦了!本文就通过循环批量插入数据的实例来模拟造数据这个场景,提供的都https://www.jianshu.com/p/d96aafc102fe
15.「翔博精选指标」金手指(通达信公式主图源码测试图)箱底箱本指标有未来函数 发现未来函数DVOL! 发现未来函数DCLOSE! 发现未来函数TROUGH! 发现未来函数PEAK! {金手指} MA1:MA(CLOSE,5); MA2:MA(CLOSE,10); MA3:MA(CLOSE,25); MA4:MA(CL 本指标有未来函数 发现未来函数DVOL! 发现未来函数DCLOSE! 发现未来函数TROUGH! http://www.xiangbosoft.com/shenghuo/9592.html
16.同花顺GS趋势策略副图指标多指标组合趋势买卖策略源码测试图授权方式:指标源码 公式分类:同花顺公式 指标类型:副图 运行环境:同花顺软件 所需积分:0 相关Tags: 同花顺GS趋势策略副图指标 多指标组合趋势买卖策略 源码 测试图介绍 好股网(www.goodgupiao.com)提示:您正在下载的是:同花顺GS趋势策略副图指标 多指标组合趋势买卖策略 源码 测试图 https://www.goodgupiao.com/gupiaogongshi/65601.html
17.PHP开发的DJ音乐网整站源码PC+WAP亲测完美运行3000多数据带8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别! 站长QQ:1754646538 站长邮箱:1754646538@qq.com dj源码音乐网 YUANLEISVIP 全网VIP视频解析网站源码 带后台 可自定义广告【免费分享】 https://www.yuanlei.net/157131.html
18.2021年1月16日随着我国软件产业与信息化建设的深入发展,软件安全测试技术逐渐成为软件企业生存和信息化项目建设好坏的关键,提升我国软件测试能力,已成为保障软件质量的必要手段。培养测试高级人才、提供高效、优质的软件质量测试服务是当前共同的目标。 为进一步帮助各单位相关人员深入了解软件安全测试技术及渗透测试技巧,提升各相关单位的应https://www.cesi.cn/202101/7184.html