有时候不禁感叹:QA 的工作就是这样,做得好是你的职责所在,做不好就得背锅等等。。你不做好还有其他选择吗???有时候,更是拿着卖白菜的工钱,操着卖白粉的心。。下面来吐槽下最近遇到的一些小事儿~~,顺便来个个人的自我阶段性总结。

一、背景
现在的团队都是新组过来做新的业务,团队不是很熟,流程相对不规范,时间也相对紧迫。基本上是开发拿到需求,开发,然后匆忙给 QA 测试。然而,没有自测的代码给 QA 测试会给 QA 带来一定的不方便,消耗一定测试时间。

二、原因分析
目前在做的系统是比较复杂,而且各个模块间交互多。为了走敏捷测试和提高测试覆盖率,QA 拿到开发的代码进行测试,如替换测试资源、校对返回数据等。

三、测试
(1)拿到开发的代码打开的页面缺少样式,导致数据排列混乱。具体原因是实际的发布环境不能添加具体的样式,其代码被注释了,测试的时候需要手动开启所注释的代码。页面显示如下图:

开发的注释完整代码为:

<androidDependency>
<![CDATA[test]]>
</androidDependency>
<iosDependency>
<![CDATA[test]]>
</iosDependency>
<jsDependency>
<javaScript name="jquery" version="1.7.0"/>
<javaScript name="qtiSupport" version="v2"/>
<javaScript name="jquery-ui-touch-punch" version="0.2.3"/>
<!--<javaScript name="skin" version="table_wood"/>-->
</jsDependency>

此时需要将这一行解除注释:

<javaScript name="skin" version="table_wood"/>

修改后的代码为:

<androidDependency>
<![CDATA[test]]>
</androidDependency>
<iosDependency>
<![CDATA[test]]>
</iosDependency>
<jsDependency>
<javaScript name="jquery" version="1.7.0"/>
<javaScript name="qtiSupport" version="v2"/>
<javaScript name="jquery-ui-touch-punch" version="0.2.3"/>
<javaScript name="skin" version="table_wood"/>
</jsDependency>

这样就可以将皮肤样式导入,数据有规律的布局。

(2)图片资源加载无法显示,效果图如下:

查看代码才发现,在具体的资源 xml 文件中并没有配置相应的图片,其代码中资源路径不存在工程中,这个阅读代码需要一段时间。。竟然在工程目录下未新建 pics 目录,且代码中还是 demo1、demo2 图片。。不过,阅读后还是能看出一些端倪,此时给相应工程文件目录下新建图片资源,如下图:

在代码中添加对应的图片名称,如下图:

编译后查看图片资源是后加载正常,如下图(只截图部分了,为了不泄漏策划案和 UI、UE):

(3)真正测试的才刚刚开始,需要替换资源的行、列数,多种不同组合进行测试,从 2×1 到 5×5 不等,具体 XML 代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<assessmentItem xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p1 http://www.imsglobal.org/xsd/imsqti_v2p1.xsd"
                identifier="gapMatch" title="Richard III (Take 1)" adaptive="false" timeDependent="false">
    <responseDeclaration identifier="RESPONSE_1-1" cardinality="multiple" baseType="directedPair">
        <correctResponse>
            <value>W G_1_1</value>
            <value>Su G_1_1</value>
        </correctResponse>
        <mapping defaultValue="-1" lowerBound="0">
            <mapEntry mapKey="W G1" mappedValue="1"/>
            <mapEntry mapKey="Su G2" mappedValue="2"/>
        </mapping>
    </responseDeclaration>
    <outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float"/>
    <itemBody>
        <gapMatchInteraction responseIdentifier="RESPONSE_1-1" shuffle="false">
            <prompt>
                <p>看图思考,应如何根据食性对水果、蔬菜进行分类?</p>
                <!--<img src="$(ref-path)/edu/esp/assets/6de7bdb0-3e75-4770-8c2b-ae9d4d8f1f28.pkg/21_367046722_IMG_0004.JPG" alt=""/>-->
                <video src="http://sdpcs.dev.web.nd/v0.1/static/edu/esp/assets/060a40c9-6ab1-43b0-b72b-3668f95dff24.pkg/kk_mov.mov" controls="controls"></video>
            </prompt>
            <gapText identifier="W" matchMax="2"><img src="../resources/pics/dome01.png" alt="" /></gapText>
            <gapText identifier="Sp" matchMax="2"><img src="../resources/pics/dome02.jpg" alt="" /></gapText>
            <gapText identifier="Su" matchMax="2"><img src="../resources/pics/dome03.png" alt="" /></gapText>
            <gapText identifier="A" matchMax="3">一段文字</gapText>
            <div class="table_match_content">
                <table>
                    <thead>
                        <tr>
                            <th>   </th>
                            <th>水果</th>
                            <th>蔬菜</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>温性</td>
                            <td>
                                <p>
                                    <gap identifier="G_1_1">
                                        <img src="../resources/pics/dome03.png" alt="" class="table_img"/>
                                        <img src="../resources/pics/dome03.png" alt="" class="table_img"/>
                                    </gap>
                                </p>
                            </td>
                            <td>
                                <p>
                                    <gap identifier="G_1_2"/>
                                </p>
                            </td>
                        </tr>
                        <tr>
                            <td>寒性</td>
                            <td>
                                <p>
                                    <gap identifier="G_2_1"  />
                                </p>
                            </td>
                            <td>
                                <p>
                                    <gap identifier="G_2_2"/>
                                </p>
                            </td>
                        </tr>
                        <tr>
                            <td>热性</td>
                            <td>
                                <p>
                                    <gap identifier="G_3_1" />
                                </p>
                            </td>
                            <td>
                                <p>
                                    <gap identifier="G_3_2"/>
                                </p>
                            </td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </gapMatchInteraction>
    </itemBody>
    <responseProcessing template="http://www.imsglobal.org/question/qti_v2p1/rptemplates/map_response"/>
</assessmentItem>

需要更改的资源代码部分如下图:

(4)还需要对比实际返回的 XML 数据是否和开发的 API 格式一致以及数据正确性
开发的 API 返回数据规定如下:


<assessmentResult xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns="http://edu.nd.com.cn/xsd/assessmentResult"
                  xsi:schemaLocation="http://edu.nd.com.cn/xsd/assessmentResult http://nd-schema.dev.web.nd/xsd/assessmentResult.xsd">
    <itemResult>
        <outcomeVariable identifier="completionStatus">
            <value>FAILED|PASSED</value> <!-- 答题结果[正确:PASSED;错误:FAILED] -->
        </outcomeVariable>
        <outcomeVariable identifier="SCORE">
            <value>0</value> <!-- 答题得分[正确:1;错误:0] -->
        </outcomeVariable>
        <responseVariable identifier="duration">
            <candidateResponse>
                <value>19</value> <!-- 答题用时 -->
            </candidateResponse>
        </responseVariable>
        <responseVariable identifier="numAttempts">
            <candidateResponse>
                <value>0</value> <!-- 答题次数 -->
            </candidateResponse>
        </responseVariable>
        <responseVariable identifier="RESPONSE_1-1" cardinality="MULTIPLE" baseType="directedPair">
            <!-- 正确的响应 --->
            <correctResponse>
                <value>W G_1_1</value>
                <value>Su G_1_2</value>
                <value>P G_2_1</value>
            </correctResponse>

            <!-- 用户提交的响应-->
            <candidateResponse>
                <value>Su G_1_1</value>
                <value>W G_1_2</value>
                <value>P G_2_1</value>
            </candidateResponse>
        </responseVariable>
    </itemResult>
</assessmentResult>

实际的返回数据,需要在代码中将数据放在 console 中打印出来,并在 Chrome 下的 Network 下查看,将实际的数据和开发的 API 校对。而有时候,开发并未将数据打印在 console 中,此时就需要 QA 自己能走查代码添加打印出回来的代码:
console.log(resultXML);//将数据打印  
return resultXML;//返回数据 

具体的可参考:JS 中将控制台 log 输出显示到浏览器中 
将实际返回的数据进行校对,具体返回格式如下:

?xml version="1.0" encoding="UTF-8"?>
<assessmentResult>
    <itemResult>
        <outcomeVariable identifier="completionStatus">
            <value>FAILED</value>
        </outcomeVariable>
        <outcomeVariable identifier="SCORE">
            <value>0</value>
        </outcomeVariable>
        <responseVariable identifier="duration">
            <candidateResponse>
                <value>97</value>
            </candidateResponse>
        </responseVariable>
        <responseVariable identifier="numAttempts">
            <candidateResponse>
                <value>2</value>
            </candidateResponse>
        </responseVariable>
        <responseVariable identifier="RESPONSE_1-1" cardinality="multiple" baseType="directedPair">
            <correctResponse>
                <value>W G_1_1</value>
                <value>A G_1_4</value>
                <value>B G_1_5</value>
                <value>Sp G_1_2</value>
                <value>Su G_1_3</value>
            </correctResponse>
            <candidateResponse>
                <value>W G_1_1</value>
                <value>Sp G_1_2</value>
                <value>Su G_1_3</value>
            </candidateResponse>
        </responseVariable>
    </itemResult>
</assessmentResult>

(5)真实的环境需要在 PC Web 和 Web App 上一起测试,有时候在 web 端可以跑通,但在 Web App 上跑不同,开发未做自测。。给 QA 测试带来一定阻碍。。

四、总结
在团队比较新,团队协作又比较多,所开发系统复杂如交互多、技术难,以及时间比较紧迫,团队制度不健全等复杂情况下,QA 测试会受到一定的阻碍。此时,需要 QA 有较强的分析能力、沟通能力、心里承受能力,帮助项目完成。有时候不禁感叹:QA 的工作就是这样,做得好是你的职责所在,做不好就得背锅。。你不做好还有其他选择吗???有时候,就是拿着卖白菜的工钱,操着卖白粉的心。。
哈哈~~
下班后随笔,请大家吐槽!


↙↙↙阅读原文可查看相关链接,并与作者交流