比较两张图片内容是否相同的自动化解决方案

上一篇 / 下一篇  2009-03-21 00:30:38 / 个人分类:QTP

EP*vJE&jVY:a0 

a0F)@/D+_ ?Mms+g0 51Testing软件测试网gjr/{?L5q8Y

  最近有个Case需要用到比较两张图片是否相同,在如何自动化这个Case上试了不少51Testing软件测试网6j}4ARE6Oi9@

P8qL1V E|(~A*@g0种方法,根本不能用或者效果不太好。51Testing软件测试网L/A!I[6M0E

51Testing软件测试网^lFQ1U2J?

下面列出一下自动化这个Case的过程。

X0OHAl^ q0 51Testing软件测试网FR;X"OD(f B/rM

首先想到的是不是能用图片检查点啊?答案肯定是根本不能,图片检查点那东西只能用来比较回放后的图片属性还是不是和原来一样,如url地址,从而且来判断是不是原来那张图片,这个对本例没用。51Testing软件测试网I3w(n ` M7`(d

51Testing软件测试网;]_[`H#B!Z

第二个方法,我知道有个ScreenCapture API好像可以用来做这个事情,是从原来陈能技的介绍上知道的,但AK告诉Jason用这个,Jason试了一下,说这玩艺从来没有一次返回值是表示相等,都是返回一个差异值,但又没有一个标准说多少差异值是允许的范围。所以也没戏。我也没有去考证。是不是文档里面还有提到的东西他没有搞清楚。

%o7Dj$I;L%`3F^0 51Testing软件测试网~$O hE'\ g!\F_

第三个方法,我发现Jason虽然Qtp知识面不够,但是也是蛮聪明的,这个方法是我51Testing软件测试网#T8Hg9[lq

51Testing软件测试网$DQA?J5a}.uS

前面的方法不过时预备的。他找了个软件,把这两个东西一比,有个相似度,会是

,@*H\.Ph oU#r's0 51Testing软件测试网Q6z$O:`;BJOJ

100%,有用!小明邓还是比较细致,说给调节一下图片亮度,看是否还会返回相同的51Testing软件测试网Cn$Umh

\~D!Q!P#I0结果。也就是说你借用外部工具,首先得保证这个工具是能返回正确的结果。否则就51Testing软件测试网X5J2i.]MO-Q:w2qJ

3i\*h*W`&k lH0没有意义了。51Testing软件测试网m(@g,g8Yi

.l2r(c,U6D!P I'X0其实第二个和第三个都是软件的算法来比较的。51Testing软件测试网f.u$CY9d \1R

51Testing软件测试网&Lo?;Q ~n{!zk

但这第三个软件不是免费的。哎!总之还是有点不完美。51Testing软件测试网*z&t*x?2g,V^4U

I(^2Xz2x0而我原来的预留解决方案是什么呢,就是因为我知道有windiff比较工具嘛。我用它51Testing软件测试网x3N;Lg2[[Uh

51Testing软件测试网-ms5~T3N'O

一比,得得结果不就完事,简单多了。可是不知道windiff能不能支持二进制的比较51Testing软件测试网R)VR|X |

9I~0D|!V&h0有些比较工具好像不支持。

5n4`A.K%E&ur9m0

ZIQt @0所以我说Jason还是蛮聪明的。跟我的预留解决方案,很像!

"sx#o Xo:`m1I0

,I)m:C[-{'M*Et an~0第四个解决方案,是通过访问控件本身的Image属性,Image固名思义就是图像喽。51Testing软件测试网M`r6W/j

51Testing软件测试网c^QF:b6?$w-PG-@

里面返回的是一个数组值,数组里面的元素是个二进制字符串值,Jason用msgbox一51Testing软件测试网n6j{9FAE,y

51Testing软件测试网1Pz?"v!DQ1J+A

show全部是乱码,因为是二进制的哈就问我有没有什么方法,起码我不知道他到底想

!G1wIQe0

A%EBT'Y?2wK0要干什么,但如果是二进制的比较的话,应该是有专门针对的方法的,因为读文件的51Testing软件测试网0b:F7a3id#^

51Testing软件测试网7?IbuM*L

时候就专门有个二进制的读,但我们一般不用他。所以大多数人也不记得!结果

E1s G H5eBn+{,N0 51Testing软件测试网.Kl ?WHm]nB,MJ

Jason看了一下StrComp是有二进制的比较方式,说StrComp是AK告诉他的。其实

Q[:K.GIN5~+G;sC0

&pUz;r6k0StrComp不算什么,用得多的人都应该知道!关键是他找出了这个Image属性比较重

Yw JPAi N!w9{%l0

.IE;l$hC0c-Mb0要,他是慢慢去试出来的,看哪个比较像就去试试!对控件本身要是熟悉那是最好不51Testing软件测试网H-d#D,Bu;e ~

51Testing软件测试网8EKD:H\cJ

过了,不懂的话就慢慢一个个去试了!51Testing软件测试网!]G9{7|H)LMF5C+X

%~2m4P W$d%C8i;^3z"w0第五,基于上面的那个思路,我想其实最终的思路应该是这样的:

Oz5V!f2lr0

;GD+A&?1}@m0首先把这两个文件都以二进制的方式读出来,然后二者再一比较,就完事了!因为

*s)y C Cn0 51Testing软件测试网s;}+ctn~ ~%_

上面的就是这样的原理,实际就是说控制本身提供了获取文件二进制值的属性。

&I3rogZ p(a0

Y.zZ5El Z P+vg0只是我的想法,并没有亲自试验过。另外我有个疑问就是,如果二个文件的二进制值51Testing软件测试网J2_9Ru9A l2A&B1g

51Testing软件测试网4`,Bci:A

完全一样,就能证明是同一份拷贝吗?51Testing软件测试网7w3{` N_(FD.HDtN

Z+l!`w5yq0忘记补上第六条,最近新的Qtp10出来的,有一个新的feature就是可以开发自己的51Testing软件测试网u-D]/yOl

51Testing软件测试网'{(D*RE)J2c'R3\

图像算法。不过这玩艺肯定没有那么简单了!51Testing软件测试网(l#q/QU&`

0gGK V5n#g%MI W0以上,借有这方面需求的朋友思考借鉴一下!不足之处还请原谅!51Testing软件测试网%H*zPa8y1MK? NL

C9wN5w{ M0 51Testing软件测试网/C{ d8k0xt6gY


TAG:

kakamissyou的测试小栈 引用 删除 kakamissyou   /   2009-05-26 23:45:47
I am not gonna debate with you.But i can tell you that what i had done in my current project. First,I should give you some background of our project.We will put a piece of paper into scanner. and the we can get a image or PDF out,Here the question is that how can i automate that scenario? How can i make a decision whether the output image is the same with the actual inputted paper? Listen clearly. First,I will test that scenario
manually. and the i can get a digital image output.Right?and then i saved it as criterion.Next time,When i am ready to automate that case,I just compare the current output image with the image saved before.Definitely.I must load the same previous paper.make sense?
Iris 引用 删除 xwzhaojing   /   2009-05-19 17:19:02
现在不是纯文字的。你试过 两次截得得图片,同样是用电脑截的图,但是两张图片通过二进制流进行比较,比较后的结果是一样的吗? 还是你用这个方法进行比较的都是同一个图片的拷贝?
kakamissyou的测试小栈 引用 删除 kakamissyou   /   2009-05-19 15:56:21
那是因为他本来就不一样,好不好。

这种方法的缺点是没有精度范围可以控制。

如果是纯文字的可以试试用OCR
Iris 引用 删除 xwzhaojing   /   2009-05-19 10:02:45
我试过这种方法了,只有是图片的拷贝才可以比较通过,不是拷贝的,肉眼看上去一样,但是比较结果确是不一样的。。。。郁闷。。。
Iris 引用 删除 xwzhaojing   /   2009-05-19 09:41:14
我试过这种方法了,只有是图片的拷贝才可以比较通过,不是拷贝的,肉眼看上去一样,但是比较结果确是不一样的。。。。郁闷。。。
kakamissyou的测试小栈 引用 删除 kakamissyou   /   2009-03-30 22:42:14
解决了。
问了下开发,说是有做过缓存,压缩处理。所以图像有一定的损失。

不压缩就好了。完全通过!

不过程序也说了,他们原来这样做是为了性能考虑的。今天在会上说了。这样一来,担心又有性能问题,哎,哈!
kakamissyou的测试小栈 引用 删除 kakamissyou   /   2009-03-30 22:40:40
碰到问题了。
就是有的图比较通过,有的却比较失败。
失败的图,肉眼看上去相似,实际却是失败。
感觉可能是被测程序做过处理,手工测试是允许误差。但是用二进制比较的时候却只有两个结果,通过和不通过。没有误差范围可选啊!
头疼!
 

评分:0

我来说两句

Open Toolbar