了解项目的需求分析及拆解、手动测试开发最小可行产品

举报
泽宇-Li 发表于 2023/07/14 13:32:36 2023/07/14
【摘要】 一、项目需求分析及拆解项目案例在写代码之前做需求分析,明白写什么,清晰的判断出来写的对不对,不然就白忙活了。首先需要梳理需求,根据第一篇文章写的。主要需求:当pytest执行结束之后,自动将结果发送到钉钉、微信、飞鼠、email等。不能指着一句话写代码,首先要对需求进行梳理,需要不断的抛出问题,结果包含什么?比如:希望pytest的结果包含什么呢?结合实际业务需求:测试开始时间(必有)测试结...

一、项目需求分析及拆解项目案例

在写代码之前做需求分析,明白写什么,清晰的判断出来写的对不对,不然就白忙活了。首先需要梳理需求,根据第一篇文章写的。

主要需求:当pytest执行结束之后,自动将结果发送到钉钉、微信、飞鼠、email等。

不能指着一句话写代码,首先要对需求进行梳理,需要不断的抛出问题,结果包含什么?

比如:希望pytest的结果包含什么呢?结合实际业务需求:

测试开始时间(必有)

测试结束时间

测试执行时长

测试用例总数量

测试用例成功的数量

测试用例失败的数量

测试用例通过率

测试报告地址

等等 结合团队、环境根据实际开发。

发送到“哪里”?根据实际情况发送到微信、钉钉、也可以扩展的比如说发展到推特、微博之类的。思考需求内容,是不同的场景,比如说:给钉钉发送消息呢?首先需要注册个钉钉号-钉钉号加自己号好友-通过消息对话框发送消息。另外方案:可以通过钉钉的群来发送,适用于发送给多人。 实现具体化。微信也是如此:个人、群、公众号。来了解发送到什么地方?

怎么去发送?需要加好友、在手机或电脑发送好友消息。群的话不需要加好友用群的机器人发消息、通过接口发送消息。公众号也许要调用接口,前提是必须关注公众号才会发送内容。EMAIL通过SMTP服务器发送右键即可。

什么时候发送?每次测试结束还是有用例失败?写代码之前分析需求,找产品经理确认需求再去做。比如说选择刚开始的:测试开始时间、测试执行时长、测试用例总数量、测试用例成功的数量、测试用例失败的数量、测试用例通过率。发送到群当中,使用机器人方式发送,选择而每次测试结束后发。

二、编码思路

编写伪代码,将需求思路捋一遍,保证代码正确。Pytest在运行时会调用很多hook,那我们需要哪些呢?根据分析来确定hook。

比如:

测试开始时自动执行,记录开始时间。

测试结束时自动执行,记录结束时间,计算执行时长,发送结果。

怎么去知道有多少个测试用例呢?需要hook,再收集完测试用例之后自动执行,记录总的用例数量。

每一个用例执行结束之后自动执行,记录当前用例的结果。

发送到什么地方需要用API,如果说发送到微信,只能用企业微信了,如果说发送到钉钉、飞书是提供相关接口的。以微信为例,在群当中添加机器人的名字后会出现接口和接口的说明。如图:

补充:

通过EMAIL的SMTP协议来发送,所以我们需要SMTP的服务器、账号、链接代码实现。

先写测试用例在写代码,比如说记录时间,怎么确定是记录到了呢?需要测试用hook确实得到了相关结果,保证产品交互。但是不可能写完所有代码后再去测试,这就缺少了全局观,不知道代码细节所以更偏向黑盒测试,但测试开发更偏向于白盒测试,所以用例需要在写代码之前或交互之前完成,先设计测试用例,分为俩个测试:

单元测试:

测试开始时间、执行时长,是否准确。

用例执行结果,是否准确。

用例数量,是否准确。

用例通过率,是否准确。

API或SMTP,是否可用。

集成测试(满足整体需求):

测试结束时,在微信群中,收到结果通知。

通过单元测试判断做的某一些事情是否准确,通过集成测试来判断单元测试是否都完成并准确后才用到的,验证整个项目是否满足需求。

三、编码

从单元测试角度分析来编码,在之前plugin.py中已经完成了第一步,为了能够测试它需要写一个测试用例,如图:

设置代码的相应时长为2.5s,所以再2.5之后会完用例执行。在plugin中编写date时间,自动为它生成一个执行耗时,放到执行之后,打印出来时间。如图:

  

    

单元测试,通过断言来判断花费时间,是否正确。如图:

    

运行pytest即可查看,是否正确,如果错了就会报错。验证了起始时间、结束时间、用例执行时间是准确的。

用例执行结果,如果只有一个用例可能会报错,可以多写几个用例,正常来说是三个用例,俩个通过一个失败。如图:

            

检查用例数量是否正确,通过断言,assert来判断,数量是否等于3.,在收集完之后在判断,首先需要导入putest,进入之后找到所有hook,可以通过左下角的类和变量来快速找到参数,收集相关的并翻译,插件其实也可以对项目进行筛选和排序。在所有用例完成之后调用钩子,来证明所有用例收集之后结束。写钩子中的session是空函数,名字、参数、结果,参数是session包含了很多信息用例之类的,收集到的用例在什么地方呢?用例在完成之后执行,包含了全部的用例。如图:


如果涉及到了长周期的项目,怎么知道完成的定位?用例就是代表了要做的事情,数量就代表了工作的进度,用例的执行结果?通过断言来判断。如图:

执行的过程都会报错,不会让你把工作疏忽掉,其实也就间接的定位了工作进程,有用例就可以提醒什么地方没有做到位。这叫做测试驱动开发、开发进度、质量,下一步重点都是测试用例来把握。

每一个用例执行结束之后自动执行,记录当前结果。在钩子中,名字、参数、返回值比较重要,没有返回值就看其余的。当有很多钩子选择时选择参数才是对的,logreport就是结果,找到runtest开头,report的,对钩子可以先翻译,有个基本的了解。如图:

         

三个用例为什么这么多结果,其实是每个用例分了三个部分,setup、调用、teardown阶段、其实在call就是调用阶段就可以知道是通过还是失败。加一个判断,如图:

         

做一个数据的记录,记录多少个失败多少个成功,修改断言处的pass为passed,fail为failed,并统计一下一共有多少个数量,在date当中设一个初始值,当某一个用例出现结果之后呢就会修改当中的相关的用例类型的数量

         

就是说本次用例如果通过就让结果统计的数据+1。,没有前面的报错说明结果是ok的,单元测试到此就已经测试通过了。

测试通过率就不好写断言了,通过date来计算值。计算百分比也可以通过GPT来算如图:

         

         

修改2f后加入%,上述代码66.66改为66.67.

单元测试中的接口API地址,在测试中设置url请求地址,查看后是发送json的请求,所以首先导入requests,并在pdm后安装requests不需要加-d。可以在项目的配置文件中查到requests的版本号是多少,确定了确实存在这个东西。这样在安装时候才能自动下载安装。如图:

根据手册中的内容是发送post请求,比如说requests.post中,用普通文本的类型来实现,可以先测试下hello,world如图:

结果就是群里面发送了相关信息,证明了API是可用的。机器人说明当中还可以艾特某人、markdown格式。里面可能带字体颜色、语法。如图:

        

也可以自己建一个mkdown,md文件来写内容,比如说pytest自动化测试结果,需要测试时间、用例数量、执行时长、测试通过、测试失败、测试通过率、测试报告地址:http://baidu.com 如图:

               也可以通过加一个标签或mkdown的形式来体现测试失败的样子。颜色自己改如图:

           将写好的代码放到.py测试文件中,并将content内容放到下方的content。如图:


        集成测试。我们执行pytest,客户可以直接收到结果,集成不太方便自动化,将接口请求代码和它进行集成。将.py的代码复制到plugin中去,并把import放到data上面去,将测试时间放到下方的测试时间中去,加一个f用一个花括号来替代并把所需要发送的内容依次替代即可。注意百分号如果加在双引号里面则后续不用修改,如果百分号加在外面,后面的也需要加百分号并加在外面。如图:

      补充:在这里可以去掉换行,否在影响发送效果,执行时间可以进一步的优化。可以删掉s,优化毫秒。如图:

先pdm check 优化代码、检查代码质量赶快commit提交!!!备注随便写,可以获取必要数据并发送到企业微信中去。如果需要严格的验证可以pdm build打包出来,下方会出现安装包,使用全新的环境来安装安装包,来模拟全新的使用和环境的电脑。如图:

报错问题是因为版本号:可以pip install 后再卸载

这次运行就可以啦~完美 撒花 结束!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。