Automation Test in Maya Plugin Development
现状和问题
- 开发插件的功能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相关推荐
- 在VS上安装Maya Plugin Wizard错误及解决方法
总结了一下VS上编译Maya插件遇到的一些问题: 错误1:创建解决方案失败 解决方法: 用记事本打开MayaPlugInWizard.vsz 把Wizard=VsWizard.VsWizardEngi ...
- html圆形按钮和箭头同时变色,JQuery和html+css实现带小圆点和左右按钮的轮播图
是的!你没看错!还是轮播图.这次的JQuery的哟!! CSS代码: /*轮播图 左右按钮 小白点*/ #second_div{ margin-top: 160px; } .img_box{ over ...
- wordpress 外部数据接口_WordPress Plugin API(插件接口)
简介 本文介绍的是一些为 WordPress 插件开发者提供的 API (编程语言接口),以及如何调用这些接口. 阅读本文之前,请先参考开发一个插件,以便了解一些关于插件的概况和详情.文本着重于&qu ...
- maya崩溃自动保存路径_maya 使用swig将插件编译成pyd,无缝使用内置数据实现加速计算模块...
前言: 原本目的是想寻求一种方式来对cpu计算密集型代码部分进行加速替代,但是maya中mll插件的插件套路在传递参数上会占用大量的io,对于数据比较大的部分也会有相当消耗.如果全部写在c++部分又感 ...
- Maya插件教程(一)
这里主要参考了一个例子,实现创建Maya插件的简单流程.原作只实现了MEL和C++,本文补充了Python版本,并说明了C++编写的.mll插件的调用流程.插件的背景如下: 大多数人听说Maya 20 ...
- mysql sysvar int_MySQL:如何编写daemon plugin
1.什么是DaemonPlugin 顾名思义,daemon plugin就是一种用来在后台运行的插件,在插件中,我们可以创建一些后台线程来做些有趣的事情.大名鼎鼎的handlesocket就是一个da ...
- 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 ...
- Maya插件开发入门
Maya插件开发入门 这里笔者给出一个创建简单的MAYA C++插件的流程. 笔者给出MEL和C++插件两个版本,实现了同样的功能. 这个插件的背景是这样的,大多人听说MAYA8. ...
- jcFeather For Maya 2012免费版
jcFeather羽毛插件有Maya2012免费试用版. 免费版有正版的所有功能,可制作羽毛,可渲染,但是一个Maya场景文件只能有3个jcFeather 节点和3个jcPreFeather节点. j ...
最新文章
- Django学习笔记(一):第一个django程序
- DevExpress组件之——TreeList组件
- python输出去空格_Python3基础 print(,end=) 输出内容的末尾加入空格
- 【JavaSE04】Java中循环语句for,while,do···while-练习
- java 包权限_Java基础(十二)之包和权限访问
- node.js学习笔记14—微型社交网站
- redis应用之——注册、登录
- Sentinel(十七)之启动配置项
- python--OS模块,文件系统
- opencv源码学习: getStructuringElement函数;
- 【vue开发问题-解决方法】(五)vue Element UI 日期选择器获取日期格式问题 t.getTime is not a function
- 家庭记事本开发进度6
- [转]DSP2812 代码段(.text段)太长的解决办法——通过cmd文件拆分.text段
- dtu阿里云自定义透传
- qt.qpa.plugin: Could not find the Qt platform plugin “xcb“ i
- 【小家java】JUC并发编程之:虚假唤醒(spurious wakeup)以及推荐的解决方案
- 实例展示:用css实现网页图片特效
- LambdaQueryWrapper和QueryWapper的区别
- Axure 9 收录不同效果的制作过程
- 使用Python rembg库进行抠图:一行命令就搞定