现状和问题
- 开发插件的功能A的时候随手建立场景, 测试插件的功能A. 测试通过后,测试场景就被丢掉.
- 发现插件的功能A有bug时, 修改代码, 然后随手建立场景, 测试bug. 测试通过后,测试场景就被丢掉.
- 添加功能B, 测试功能B通过后, 在使用的时候发现之前的功能A却产生了bug, 应该是在添加功能B的时候产生的bug.
- 在开发人员流动大的公司里, 一个开发人员离职了, 他所开发的代码交接给后续的开发人员.
  后续开发人员很难了解原先代码的设计思路和细节, 同时在添加新功能时难免会引入bug.
 
一个可行的解决方法:
- 在开发过程中, 每增加一个新功能, 都应该写相应的testcase.
- 在开发过程中, 开发人员自己如果经常执行这些testcase(回归测试), 那么就能保证修改的代码不引入新的bug
- 一个开发人员离职了, 他所开发的代码交接给后续的开发人员. 后续开发人员看testcase,了解插件的功能如何使用.
  在添加新功能的时候, 把之前所有的testcase都执行一遍, 就能保证之前的功能没有问题. 如果有问题的话, 也能构及时发现.

新的问题:
- 一个插件可能有大大小小十几个功能, 全部测试下来可能要十几分钟. 每次修改一下代码都要花这十几分钟做回归测试的话,
  一天下来也写不了多少代码. 这样的开发效率太低.
解决方法:
- 做自动化测试. 把原先手动测试的工作让程序来做.

关于automation
框架
    - 自己写
    - 使用python unittest

如何写testcase
有了测试框架之后, 还需要有testcase. 才能让自动化测试真的有效. 关于如何写好testcase, 这里有一写个人的经验.
- testcase里一般使用unittets.assert()来测试某个变量的值是否等于正确的值.
- 如何比较数组
  比如, 如果要测试一个deform插件. 需要判断变形后的点的坐标是否正确. unittets.assert()不能比较list类型, 所以需要我们自己写.
  要比较normal, nv等数据, 也需要这么做.
- 如果要测试一个shader该怎么写testcase? 怎么判断物体上的每个像素的值都是正确的呢?
  可以把第一次渲染出的图片保存, 作为正确的图片(参考图片), 以后每次渲染出的图片和参考图片做比较. 我简称这种方法为"参考图比较".
 
  其实, 对于判断vertex position, normal, nv 都可以用这种方法做回归测试.
  测vertex position的话, 渲染一张图就能看得出点的坐标是否正确;
  测vertex normal的话, 给mesh赋一张材质,渲染一张图就能看得出点的normal是否正确;
  测vertex uv的话, 给材质赋一张checker纹理,渲染一张图就能看得出点的uv是否正确;
 
  怎么样? 是不是觉得这个方法非常酷? 事实上, 如果你沿着这条路走下去的话, 你会发现实际上这是个无比大的坑! 但幸好这个坑还是有出路的.
  所以, 我的建议是, 尽量不用"参考图比较"的方法, 而使用数组比较position, normal, nv这些值. 但如果要测试shader的话, 除了"参考图比较"的方法之外, 我没有想到更好的方法.
 
  下面说一下"参考图比较"的方法, 以及会遇到哪些问题:
  - 图片格式
    备选项: jpg, exr, png, bmp, ...
    以下是我选择图片格式的依据:
    - 图片文件尽可能小.
    - 方便查看. 比如, 我双击图片就可以查看, 如果能直接在文件管理器里浏览其缩略图就更好了.(所以, exr格式被剔除)
    - 跨平台. (bmp在linux不太好, 所以被剔除)
    似乎jpg, png都是不错的选择. 但jpg是有损压缩. 为了避免压缩导致图片不一致, 我最终还是选择png格式.
  - 如何比较两张图片是否一致
  - 用什么渲染器来渲染参考图
    备选项:mayaSoftware, mentalray, arnold,
    - 最好是maya自带的渲染器, 因为使用起来方便.
    - 所以, 似乎mayaSoftware是首选. 但如果你用这个渲染器, 会发现每次渲染的图片都不一致(虽然人眼不出差异). 出来的图片根本不适合做参考图.
    - 其次, mentalray每次渲染的图片是一致的. 但是, 相同maya版本, 不同平台下, mentalray渲染的图片有时会不一致. 更糟糕的是, 不同maya版本的mentalray渲染的图片差异很大.
      为什么? 因为mentalray在不断的更新, 比如采样的方法变了, 渲染出的图片肯定就不一样了.

- 如何制作testcase的maya文件
  - 批量更新testcase的maya文件, 是一件非常痛苦的事情

运行自动化测试的一些技巧

转载于:https://www.cnblogs.com/yaoyansi/p/4761651.html

Automation Test in Maya Plugin Development相关推荐

  1. 在VS上安装Maya Plugin Wizard错误及解决方法

    总结了一下VS上编译Maya插件遇到的一些问题: 错误1:创建解决方案失败 解决方法: 用记事本打开MayaPlugInWizard.vsz 把Wizard=VsWizard.VsWizardEngi ...

  2. html圆形按钮和箭头同时变色,JQuery和html+css实现带小圆点和左右按钮的轮播图

    是的!你没看错!还是轮播图.这次的JQuery的哟!! CSS代码: /*轮播图 左右按钮 小白点*/ #second_div{ margin-top: 160px; } .img_box{ over ...

  3. wordpress 外部数据接口_WordPress Plugin API(插件接口)

    简介 本文介绍的是一些为 WordPress 插件开发者提供的 API (编程语言接口),以及如何调用这些接口. 阅读本文之前,请先参考开发一个插件,以便了解一些关于插件的概况和详情.文本着重于&qu ...

  4. maya崩溃自动保存路径_maya 使用swig将插件编译成pyd,无缝使用内置数据实现加速计算模块...

    前言: 原本目的是想寻求一种方式来对cpu计算密集型代码部分进行加速替代,但是maya中mll插件的插件套路在传递参数上会占用大量的io,对于数据比较大的部分也会有相当消耗.如果全部写在c++部分又感 ...

  5. Maya插件教程(一)

    这里主要参考了一个例子,实现创建Maya插件的简单流程.原作只实现了MEL和C++,本文补充了Python版本,并说明了C++编写的.mll插件的调用流程.插件的背景如下: 大多数人听说Maya 20 ...

  6. mysql sysvar int_MySQL:如何编写daemon plugin

    1.什么是DaemonPlugin 顾名思义,daemon plugin就是一种用来在后台运行的插件,在插件中,我们可以创建一些后台线程来做些有趣的事情.大名鼎鼎的handlesocket就是一个da ...

  7. Grasshopper 二次开发 (C#) Part 3 - Write Simple Plug-in for Grasshopper in Visual Studio

    本博客内容正在持续更新,最后一次更新时间:2020.08.09 [本文重点] 1.查文档:(1) RhinoCommon SDK (2) Grasshopper API 2.专栏地址:专栏:Rhino ...

  8. Maya插件开发入门

    Maya插件开发入门      这里笔者给出一个创建简单的MAYA C++插件的流程.      笔者给出MEL和C++插件两个版本,实现了同样的功能. 这个插件的背景是这样的,大多人听说MAYA8. ...

  9. jcFeather For Maya 2012免费版

    jcFeather羽毛插件有Maya2012免费试用版. 免费版有正版的所有功能,可制作羽毛,可渲染,但是一个Maya场景文件只能有3个jcFeather 节点和3个jcPreFeather节点. j ...

最新文章

  1. Django学习笔记(一):第一个django程序
  2. DevExpress组件之——TreeList组件
  3. python输出去空格_Python3基础 print(,end=) 输出内容的末尾加入空格
  4. 【JavaSE04】Java中循环语句for,while,do···while-练习
  5. java 包权限_Java基础(十二)之包和权限访问
  6. node.js学习笔记14—微型社交网站
  7. redis应用之——注册、登录
  8. Sentinel(十七)之启动配置项
  9. python--OS模块,文件系统
  10. opencv源码学习: getStructuringElement函数;
  11. 【vue开发问题-解决方法】(五)vue Element UI 日期选择器获取日期格式问题 t.getTime is not a function
  12. 家庭记事本开发进度6
  13. [转]DSP2812 代码段(.text段)太长的解决办法——通过cmd文件拆分.text段
  14. dtu阿里云自定义透传
  15. qt.qpa.plugin: Could not find the Qt platform plugin “xcb“ i
  16. 【小家java】JUC并发编程之:虚假唤醒(spurious wakeup)以及推荐的解决方案
  17. 实例展示:用css实现网页图片特效
  18. LambdaQueryWrapper和QueryWapper的区别
  19. Axure 9 收录不同效果的制作过程
  20. 使用Python rembg库进行抠图:一行命令就搞定

热门文章

  1. iphone怎么投屏到电脑_手机怎么投屏到电脑?这几步轻松学会
  2. 每天5分钟玩转python3算法:选择排序
  3. 剑指offer 算法 (递归与循环)
  4. Set the roller speed
  5. ios 消除 字符串 首尾空格
  6. Android之使用HTTP协议的Get/Post方式向服务器提交数据
  7. 图像的膨胀与腐蚀、细化
  8. 给ModalPopupExtender控件添加弹出关闭等事件
  9. 误差模型:过拟合,交叉验证,偏差-方差权衡
  10. 《Create Your Successful Agile Project》书评与作者访谈