您的位置:首页 > 星座

颜值测试在线测试百度(颜值测试在线测试)

颜值测试在线测试百度(颜值测试在线测试)

怎么样才能知道自己真实的颜值?

#秋日生活打卡季#

看到标题

有人可能会疑惑:

“我当然是帅过吴彦祖啦

还需要你教我判断?”

“每天早上都会被自己帅醒

我颜值应该算中等偏上吧?”

行!

为了让你们对自己的颜值

都能有点那啥数

今天,我就教教大家

如何确定自己长得好不好看?

首先,最简单最直接的方法

就是直接和帅哥美女对比

一般来说

大家公认的帅哥美女的标准

两眼之间的距离

基本符合1:1:1的关系

眉毛和眼睛之间的距离

也得是一个眼睛的高度

脸型也讲究一个

“三庭五眼”、左右协调对称

另外,有科学家

在他的书《亲密关系》里面

总结了一些

人对于长得好看的人的特征总结

书中写道

世界上公认的美女

应该有以下这些特征

而帅哥们也应该有这两个特征

其次,身材作为我们颜值的一部分

也是必须要考虑的

翘臀、长腿、小蛮腰这种显而易见的

我就不说了

你们自己对自己应该都有数

主要讲几个美女/帅哥才有的特征

比如一看

小腿和大腿之间有没有缝隙

二看

小腹两边有没有这两条线

三看

屁股上面

腰间脊柱旁边有没有

两个凹进去的窝

如果这些你都有

说明即使你现在身材没那么好

那也是个潜力股

只要稍加锻炼就能练出比别人更好的身材!

当然

自己颜值的高低

光靠自己来判断是肯定不行的

毕竟有些人的个人滤镜太强

王宝强都能看成了吴彦祖

所以,我们还需要借助其他人

来判断自己的颜值

到底有多高

【1】

婴儿判断法

成年人可能会说谎

但婴儿不会!

有科学家做过一个实验

发现还没有自主意识的婴儿

就已经很会「以貌取人」了

他们盯着好看的脸的时间

会比盯着丑脸的时间要长很多

所以,你们注意观察

周围小朋友对你的反应

如果小朋友连看都不看你一眼

那说明,你的颜值可能真的不咋高

【2】

鸡啄法

如果你没有小朋友可以测试

也没有真诚的朋友

坦率地看待你的颜值

那你还可以选择找一只鸡

让他告诉你,你到底长得好不好看

国外一研究小组做过一个研究

他们让人和鸡

同时看一组颜值不同的脸照

结果显示:人选的好看的脸和鸡啄的脸

竟出奇的一致

所以,你可以多拿几张不同人的照片

让鸡选择啄哪个

如果鸡啄你

说明你的颜值还可以

如果连鸡都不啄你

那你就多少有点那啥数了

【3】

交往时长法

这个方法主要针对男生

因为有研究发现

获得与异性交往的机会方面

男人长相的吸引力比女人的长相更重要

说人话就是

女生不管好不好看

和男生的交往总时间

其实都是差不多的

但男人就不一样了

如果一个男生长不好看

那他和女生交往的次数和时间

要比那些帅哥少得多

少非常多

就比如说

一个帅哥哪怕他没有对象

也没有要好的女性朋友

但包括他周围的陌生女性、同事

甚至扫地阿姨们和他的相处时长

加起来都是不少的

但如果一个男生

一周/一天之中也见过不少女生

但没人搭话,也没有任何交流

就连食堂阿姨都不愿意多搭理你

路人问路都绕过你

那你大概能明白

自己的颜值处在一个

什么位置了吧?

博士一分钟,姿势涨不停

- 本期完 -

怎么样才能知道自己真实的颜值?

#秋日生活打卡季#

看到标题

有人可能会疑惑:

“我当然是帅过吴彦祖啦

还需要你教我判断?”

“每天早上都会被自己帅醒

我颜值应该算中等偏上吧?”

行!

为了让你们对自己的颜值

都能有点那啥数

今天,我就教教大家

如何确定自己长得好不好看?

首先,最简单最直接的方法

就是直接和帅哥美女对比

一般来说

大家公认的帅哥美女的标准

两眼之间的距离

基本符合1:1:1的关系

眉毛和眼睛之间的距离

也得是一个眼睛的高度

脸型也讲究一个

“三庭五眼”、左右协调对称

另外,有科学家

在他的书《亲密关系》里面

总结了一些

人对于长得好看的人的特征总结

书中写道

世界上公认的美女

应该有以下这些特征

而帅哥们也应该有这两个特征

其次,身材作为我们颜值的一部分

也是必须要考虑的

翘臀、长腿、小蛮腰这种显而易见的

我就不说了

你们自己对自己应该都有数

主要讲几个美女/帅哥才有的特征

比如一看

小腿和大腿之间有没有缝隙

二看

小腹两边有没有这两条线

三看

屁股上面

腰间脊柱旁边有没有

两个凹进去的窝

如果这些你都有

说明即使你现在身材没那么好

那也是个潜力股

只要稍加锻炼就能练出比别人更好的身材!

当然

自己颜值的高低

光靠自己来判断是肯定不行的

毕竟有些人的个人滤镜太强

王宝强都能看成了吴彦祖

所以,我们还需要借助其他人

来判断自己的颜值

到底有多高

【1】

婴儿判断法

成年人可能会说谎

但婴儿不会!

有科学家做过一个实验

发现还没有自主意识的婴儿

就已经很会「以貌取人」了

他们盯着好看的脸的时间

会比盯着丑脸的时间要长很多

所以,你们注意观察

周围小朋友对你的反应

如果小朋友连看都不看你一眼

那说明,你的颜值可能真的不咋高

【2】

鸡啄法

如果你没有小朋友可以测试

也没有真诚的朋友

坦率地看待你的颜值

那你还可以选择找一只鸡

让他告诉你,你到底长得好不好看

国外一研究小组做过一个研究

他们让人和鸡

同时看一组颜值不同的脸照

结果显示:人选的好看的脸和鸡啄的脸

竟出奇的一致

所以,你可以多拿几张不同人的照片

让鸡选择啄哪个

如果鸡啄你

说明你的颜值还可以

如果连鸡都不啄你

那你就多少有点那啥数了

【3】

交往时长法

这个方法主要针对男生

因为有研究发现

获得与异性交往的机会方面

男人长相的吸引力比女人的长相更重要

说人话就是

女生不管好不好看

和男生的交往总时间

其实都是差不多的

但男人就不一样了

如果一个男生长不好看

那他和女生交往的次数和时间

要比那些帅哥少得多

少非常多

就比如说

一个帅哥哪怕他没有对象

也没有要好的女性朋友

但包括他周围的陌生女性、同事

甚至扫地阿姨们和他的相处时长

加起来都是不少的

但如果一个男生

一周/一天之中也见过不少女生

但没人搭话,也没有任何交流

就连食堂阿姨都不愿意多搭理你

路人问路都绕过你

那你大概能明白

自己的颜值处在一个

什么位置了吧?

博士一分钟,姿势涨不停

- 本期完 -

侵犯公民个人信息罪辩护研究之二:“行为手段”的梳理及辩点研究

本文作者:北京市盈科(济南)律师事务所

王浩宇、刘三元律师

本系列文章,从侵犯公民个人信息罪的犯罪对象识别、行为模式区分、违法所得认定等维度出发,结合实务案例,对侵犯公民个人信息犯罪展开研究的系列文章。前文已从公民个人信息的识别为出发点研究了侵犯公民个人信息罪的犯罪对象,笔者将在前文的基础上,结合公民个人信息的种类,对侵犯公民个人信息罪的“行为手段”进行梳理,并对相关有效辩护观点进行论述。

一、侵犯公民个人信息罪的行为手段类型之条文规定

《关于办理侵犯公民个人信息刑事案件适用法律若干问题的解释》规定的行为手段

出售

提供(有偿/无偿提供)

非法获取:

窃取;其他方法非法获取(购买、收受、交换;履行职责、提供服务中收集)

为合法经营活动而非法购买

《检察机关办理侵犯公民个人信息案件指引》规定的行为手段

未经他人同意收集公民个人信息,或者收集与提供的服务无关的公民个人信息的,也属于非法获取公民个人信息的行为

二、侵犯公民个人信息罪的行为手段类型之案例总结

笔者通过裁判文书网等数据信息库就侵犯公民个人信息罪进行了大量案例检索,对侵犯公民个人信息罪的行为要素进行提炼与概括,归纳形成11类侵犯公民个人信息罪的行为模式如下:

(一)使用人脸识别技术处理的人脸信息以及基于人脸识别技术生成的人脸信息,属于刑法规定的公民个人信息,获取该信息构成侵犯公民个人信息罪

案例信息:李某祥侵犯公民个人信息刑事案(最高人民法院192号指导性案例);(2021)沪0120刑初828号。

案例详情:2020年6月至9月间,被告人李某祥制作一款具有非法窃取安装者相册照片功能的手机“黑客软件”,打包成安卓手机端的“APK安装包”,发布于暗网“茶马古道”论坛售卖,并伪装成“颜值检测”软件发布于“芥子论坛”(后更名为“快猫社区”)提供访客免费下载。用户下载安装“颜值检测”软件使用时,“颜值检测”软件会自动在后台获取手机相册里的照片,并自动上传到被告人搭建的腾讯云服务器后台,从而窃取安装者相册照片共计1751张,其中部分照片含有人脸信息、自然人姓名、身份号码、联系方式、家庭住址等公民个人信息100余条。

上海市奉贤区人民法院认定被告人李某祥犯侵犯公民个人信息罪,判处有期徒刑三年,宣告缓刑三年,并处罚金人民币一万元

(二)通过购买、收受、交换等方式获取在一定范围内已公开的公民个人信息进行非法利用,属于以其他方法非法获取公民个人信息的行为

案例信息:熊某恒等侵犯公民个人信息案(最高人民法院194号指导性案例);(2021)赣0981刑初376号

案例详情:2020年6月份,被告人熊某恒邀集被告人熊某林、熊某浪、熊某强一起从事贩卖载有公民个人信息可用于社交活动的成品微信号的经营活动。为谋取更多利益,2020年9月底,被告人熊某恒、熊某林、熊某浪、熊某强共同出资在网上购买了一款名叫“微骑兵”的软件(一款基于电脑版微信运行拥有多开、多号智能群发、加人、拉群、退群、清粉的营销软件),用于非法添加微信好友,并制作成品微信号予以贩卖。

江西省丰城市人民法院认定被告人熊某恒犯侵犯公民个人信息罪,判处有期徒刑三年零二个月,并处罚金人民币十万元。

(三)服务提供者专门发给特定手机号码的数字、字母等单独或者其组合构成的验证码属于刑法规定的公民个人信息,获取上述信息的构成侵犯公民个人信息罪

案例信息:罗某君、瞿某珍侵犯公民个人信息案(最高人民法院195号指导性案例);(2021)湘0212刑初149号

案例详情:2019年12月,被告人罗某君了解到通过获取他人手机号和随机验证码用以注册新的淘宝、京东等APP账号(简称“拉新”)可以赚钱,其便与微信昵称“悠悠141319”(身份不明)、“A我已成年爱谁睡”(身份不明)、“捷京淘”(身份不明)、“胖娥”(身份不明)、“河北黑志伟80后的见证”(身份不明)等专门从事“拉新”的人联系。“悠悠141319”等人在知道罗某君手里有许多学员为电信员工,学员可以直接获取客户的手机号码和随机验证码等资源时,利用罗某君担任电信公司培训老师的便利,约定由罗某君建立、管理、维护微信群,并在群内公布“拉新”的规则、需求和具体价格;学员则根据要求,将非法获取的客户手机号码和随机验证码发送至群内;“悠悠141319”等人根据发送的手机号及验证码注册淘宝、京东APP等新账号。罗某君可对每条成功“拉新”的手机号码信息,获取0.2-2元/条报酬;而学员以每条1至13元不等的价格获取报酬,该报酬由罗某君分发或者直接由“悠悠141319”等人按照群内公布的价格发送给学员。

湖南省株洲市渌口区人民法院认定被告人罗某君犯侵犯公民个人信息罪,判处有期徒刑八个月,并处罚金人民币二万元。

(四)行踪轨迹信息属于公民个人信息,行为人出售或者提供行踪轨迹信息,被他人用于犯罪的,依法构成侵犯公民个人信息罪

案例信息:陈某甲、于某、陈某乙侵犯公民个人信息案(最高人民检察院典型案例)

案例详情:2018年,陈某甲了解到“私家侦探”获利高。2020年,陈某甲决定从事“私家侦探”活动,后在网上发布信息,称可找人、查人,并注册了昵称为“专业商务调查”的微信号承揽业务。2020年12月,闵某(另案处理)通过网络搜索,联系到陈某甲,要求陈某甲寻找其离家出走的妻子郭某,并将郭某的姓名、照片、手机号码等提供给陈某甲。陈某甲于2021年1月、3月将郭某的手机号码交给他人,由该人获得郭某的手机定位后反馈给陈某甲。陈某甲则伙同于某等人在山西省吕梁市柳林县采取蹲点守候的方式,确认了郭某的具体位置,并向闵某提供。

2021年6月,闵某再次联系陈某甲要求帮助寻找其妻子。6月17日,陈某甲又采取上述方法获得了郭某的手机定位信息、快递地址信息。6月18日,陈某甲与于某、陈某乙三人驾车到达山西省吕梁市柳林县,与闵某一起蹲点守候到6月23日。后被害人郭某出现后,陈某甲等三人驾车离开。当日13时左右,闵某将郭某杀害。

柳林县人民法院认定三名被告人构成侵犯公民个人信息罪,判处陈某甲、于某、陈某乙有期徒刑三年至一年三个月不等,并处罚金。

(五)非法出售户籍信息、手机定位、住宿记录等个人信息,构成侵犯公民个人信息罪

案例信息:邵保明等侵犯公民个人信息案(最高人民法院典型案例)

案例详情:2016年初,被告人邵保明、康旭、王杰、陆洪阳分别以“大叔调查公司”的名义向他人出售公民个人信息,被告人倪江鸿不久后参与。五被告人通过在微信朋友圈发布出售个人户籍、车辆档案、手机定位、个人征信、旅馆住宿等各类公民个人信息的广告的方式寻找客户,接单后通过微信向上家购买信息或让其他被告人帮忙向上家购买信息后加价出售,每单收取10元至1000余元不等的费用。经查,被告人邵保明获利人民币26000元,被告人康旭获利人民币8000元,被告人倪江鸿、王杰、陆洪阳各获利人民币5000元。

浙江省东阳市人民法院认为:被告人邵保明、康旭、倪江鸿、王杰、陆洪阳单独或伙同他人,向他人出售公民个人信息,情节严重,其行为均已构成侵犯公民个人信息罪。综合考虑被告人的坦白、退赃等情节,以侵犯公民个人信息罪判处被告人邵保明有期徒刑一年三个月,并处罚金人民币八千元。

(六)购买公民个人信息用于违法犯罪活动构成侵犯公民个人信息罪

案例信息:陈文辉等诈骗、侵犯公民个人信息案(徐玉玉被电信诈骗案)

案例详情:2015年11月至2016年8月,被告人陈文辉、黄进春、陈宝生、郑金锋、熊超、郑贤聪、陈福地等人交叉结伙,通过网络购买学生信息和公民购房信息,分别在江西九江市、新余市,广西钦州市、海南海口市等地租赁房屋作为诈骗场所,分别冒充教育局、财政局、房产局的工作人员,以高考学生为主要诈骗对象,以发放贫困学生助学金、购房补贴为名,拨打诈骗电话2.3万余次,骗取他人钱款共计56万余元,并造成被害人徐玉玉死亡。

临沂市中级人民一审判决认定被告人陈文辉犯诈骗罪,判处无期徒刑,剥夺政治权利终身,并处没收个人全部财产,犯侵犯公民个人信息罪,判处有期徒刑五年,并处罚金人民币三万元,决定执行无期徒刑,剥夺政治权利终身,并处没收个人全部财产。

(七)收集公民个人信息用于营销活动,构成侵犯公民个人信息罪

案例信息:王争华等人侵犯公民个人信息案;(2018)鲁0883刑初422号

案例详情:2014年以来,被告人王争华在邹城市红星美凯龙广场做电话营销时收集了部分客户的公民个人信息数千条,后通过被告人林鹏飞收集了“5.9销售总表”700余条公民个人信息、“邹城来电来访客户汇总”近5,200条公民个人信息,从李某处收集了《邹城统计》和《济宁信息统计》300余条公民个人信息。2017年12月份以来,被告人王争华将获取的上述公民个人信息用于邹城市万德广场的电话营销。

判决如下:被告人王争华犯侵犯公民个人信息罪,判处有期徒刑十个月,并处罚金人民币一万元。

(八)利用工作便利在提供服务过程中获得的公民个人信息免费提供给他人,属于非法向他人提供公民个人信息,构成侵犯公民个人信息罪

案例信息:李洪、李星星、XX侵犯公民个人信息案;(2018)鲁0883刑初547号

案例详情:2018年5月份期间,被告人XX将其利用在上海浦发银行工作期间获取的客户个人信息20余万条,非法提供给山东星耀君程电子商务有限公司用于电话营销;该公司员工、被告人李星星在对这些信息资料进行加工整理后,转卖给被告人李洪,非法获利73,063.97元;被告人李洪将非法获取上述公民个人信息贩卖给陈某(另案处理)实施电话诈骗。

判决如下:三、被告人XX犯侵犯公民个人信息罪,判处有期徒刑三年,缓刑四年,并处罚金人民币二万元(罚金已缴纳)。

(九)利用职务之便,在公安内网查询公民个人信息倒卖,属于以其他方法非法获取公民个人信息的行为,构成侵犯公民个人信息罪

案例信息:张林耿、肖勇鑫侵犯公民个人信息案;(2018)鲁0883刑初90号

案例详情:2016年10月至2017年5月期间,被告人张某先后多次从其上线张某1(另案处理)、胡某1(另案处理)、被告人肖勇鑫等人处购买公民个人信息4,000余条,向郑某(另案处理)等人出卖,非法获利合计10,000余元。其中:被告人张某从张某1处购买公民个人信息4,000条,转账给张某1信息费40,000余元;被告人肖勇鑫利用其在湖南省邵阳市武冈市交警大队干辅警的条件,通过本单位正式民警的数字证书在公安内网上私自查询公民个人信息,卖给被告人张某公民个人信息600余条,每条信息价格在8-15元不等,非法获利9,000元。经勘验,从被告人张某个人手机中勘验处含有公民个人信息的数据10,000余条。

判决如下: 被告人肖勇鑫犯侵犯公民个人信息罪,判处有期徒刑十一个月,并处罚金人民币五千元。

(十)私自搜集定位信息属于以其他方法非法获取公民个人信息的行为,构成侵犯公民个人信息罪

案例信息:庞在伟侵犯公民个人信息案;(2022)鲁1323刑初197号

案例详情:被告人庞在伟与沂水县翟某素有矛盾。2020年5月,庞在伟将一定位器放置于翟某鲁Q0××**号银灰色面包车底部油箱上,自5月13日起非法获取翟某行踪轨迹信息149条,并将其中的94条提供给他人。

判决如下:被告人庞在伟犯侵犯公民个人信息罪,判处拘役六个月,缓刑十个月,并处罚金人民币一万元。

(十一)通过合法手段获取的公民个人信息用于注册个体户营业执照出售的,构成侵犯公民个人信息

案例信息:郑浩侵犯公民个人信息罪、侵犯公民个人信息案;(2021)鲁1502刑初929号

案例详情:2019年8月至12月份,被告人郑浩让亲戚朋友朱某、郑某1、郑某2、尹某、李某等人,利用个人身份信息注册大量个体户营业执照,之后注册淘宝店铺50余个,郑浩以每个店铺100元的价格进行收购。后来被告人郑浩以每个店铺每年500元至800元不等的价格出租给一个微信名为“梦园”的人,非法获利37900元。

判决如下:被告人郑浩犯侵犯公民个人信息罪,判处有期徒刑一年六个月,缓刑二年,并处罚金人民币40000元。

三、侵犯公民个人信息罪中除了针对信息是否具有可识别性进行辩护外,还应当注意对行为手段合法性与否展开辩护

笔者认为,“手段”与“对象”是一个实行行为的一体两面,分析一个行为绝不可能完全抛开对象谈手段,同样也不可能抛开手段来空谈对象。

而回归到侵犯公民个人信息罪中,信息能够单独识别或者结合其他信息识别到特定自然人是认定信息为公民个人信息的关键,更是成立犯罪的前提,于此辩护自不必说。

而对行为手段的辩护同样不容忽视,不同的信息类型决定了其行为手段的不同。现阶段司法解释对于侵犯公民个人信息的手段行为高度概括为购买、提供、非法获取,这一概括已经基本罗列了实务案例中的大部分行为方式,上文中所罗列的十数种手段其实都可以通过某些特征被归集到这三种类型中,只是结合信息类型的特定性而呈现出了手段的特殊性。

因本文仅是案例梳理,并未对具体行为手段入罪的合理性进行论证,在此仅是简单论述。但需要注意的是,以上案例中同样存在对于信息合理使用的情形,例如为合法经营活动而合法获取的信息以及在他人同意的情况下搜集使用个人信息等。但笔者认为,上述两类行为并不属于侵犯公民个人信息罪的认定范畴。理由如下:

前者无罪的核心在于合法获取,合法经营除经营业务的合法性外,更重要的是信息获取手段的合法,既然司法解释明确规定了非法获取的手段,那么在此以外,在合法经营中获取到的信息同样又使用到合法的经营活动中,自然不能认定为犯罪。

后者出罪的关键则是在被害人知情且同意行为人对个人信息的获取及使用。被害人可以自主决定对自己人身权益的支配,放弃刑法对个人法益的保护,在此情形下,即使发生法益侵害结果也不能将侵害结果归属于行为人。如果信息所有者同意行为人将个人信息进行使用,无论该信息是否能够准确识别到被害人,信息获取的手段即是合法的,不宜将此行为做入罪处理。民法典第一千零三十六条也规定了类似的条款,合理处理该自然人自行公开的或者其他已经合法公开的信息的,行为人不承担民事责任。

以上,是笔者针对“公民个人信息”行为手段的梳理,手段行为类型复杂,文中所述不过是冰山一角,对行为手段这一层次辩护的展开,更是完全的主观导向。对于行文不周或论述不当之处,恳请同侪批评指导,不胜感激为盼。

颜值担当:自动化测试报告框架Allure

前言

测试报告作为软件测试工作的一项主要输出,重要性不言而喻。而随着自动化测试在行业应用越来越广泛,自动化测试报告的可视化、包含信息的全面化、和外部系统对接的便利化需求也越来越突出。本篇 Chat 带来的就是目前测试业内应用非常广泛的专业报告框架 Allure 介绍。

Allure 框架简介

目前业界已经有非常多的强大自动化测试框架,但是这些框架生成的测试报告一般都以记录结果信息为主,在报告呈现效果上并不理想。Allure 就是这样一个提升测试报告效果的专业测试报告框架。

Allure 非常轻量级,而且配置灵活,完全开源。由俄罗斯软件公司 Qameta software 测试团队维护,目前已演进到 Allure2,最新版本是 2.10.0,Allure 简单易用,支持同目前绝大多数测试框架集成,如 Junit,Pytest,Cucumber,TestNG,mocha等。而且原生提供了中文支持,而且 Allure 生成的自动化测试报告层次丰富,界面美观,体现了现代测试报告的发展趋势。可以说无论是功能丰富程度还是展示效果都很强大。

Allure 安装和使用

在各个不同操作系统平台上部署 Allure 都非常简单,这里以 windows 系统为例,Allure 官方推荐使用 windows 系统下的软件包管理工具 scoop 来进行 allure 的安装和管理。

通过 scoop 安装

没有安装 scoop 的话,打开 powershell 执行以下命令安装 scoop:(需要 .net framework 4.5以上版本,win10 系统默认携带)

iex (new-object net.webclient).downloadstring('https://get.scoop.sh')

scoop 安装完成后执行:

scoop install allure

会安装当前最新版本的 allure 工具,目前最新版本为 2.10.0

安装完成后执行 allure --version 如能正确显示版本信息,则安装成功。如下图是安装过程。

直接下载安装

除了通过包管理工具安装,我们也可以直接下载压缩包进行安装,目前压缩包可以从 maven 的官方仓库进行下载(下载地址),选择 zip 文件,本地解压即可得到 allure 本地执行工具。

解压后,还需要配置一下系统环境变量,将 allure 的 bin 目录配到到 PATH 变量中,便于后续调用。

同样通过 allure --version 确认后即可使用。

allure 的使用

allure 可以将目前绝大部分主流的自动化测试框架生成的测试结果如 Junit 的 xml 格式报告解析转换为一个专业的测试报告,以 html 网页通过 web 服务方式呈现出来。

allure 主要支持以下命令:

allure serve [path of allure result]

这个命令是最常使用的。会将集成了 allure 功能的测试框架生成的 allure 测试结果路径下的内容转换为测试报告。同时启动一个 web 服务来展示转换后的报告

allure generate [path of allure result]

这个命令用于将测试结果转换为 allure 测试报告(不开启 web 服务)。可以携带一个 -c 参数先清空之前的结果。

allure open [path of allure report]

这个命令则会启动一个 web 服务将已经生产的测试报告打开

Allure 报告功能介绍总览

如图是 Allure 报告总览界面:从左侧导航栏可以看到,Allure 报告支持按类别、测试集、功能、包以及图表、时间刻度等多个维度进行结果信息展示,而且左下角还可以进行语言切换,包含了中文的默认支持。在总览图中很直观地展示了当前测试执行结果的总体状态。

类别

类别提供了在测试报告中按定义的分类将不同执行结果进行分类展示的功能。allure 默认会将执行失败的用例纳入 product defects 分类中。我们也可以自定义类别来进行展示。如下就是按自定义类别展示的界面:

测试套

测试套( Test suites )中可以将用例以测试集合的形式来进行展示。和 Junit 框架结合时,默认是将每一个测试类视作一个测试套进行呈现,如图:

图表展示

在 Allure 报告的图表页中,会自动将当前报告中的一些关键信息汇总以图表的方式可视化呈现出来,包括执行状态、执行优先级、执行耗时、耗时趋势、结果趋势、分类趋势、重试趋势等数个维度。如图:

时间刻度

在 时间刻度 页中,提供了一个基于执行耗时的刻度表,可以非常直观地看到每个 case 执行的耗时区间,便于直观地识别出性能最差的用例。

功能

功能 页是 Allure 提供的一个非常有用的特色功能。Allure 支持结合自动化测试框架深度定义不同 case 所属的功能维度,并根据这个维度分级展示。这个分级维度和目前流行的敏捷研发的需求拆分原则基本一致,按对应需求从大到小逐级递减:

对应在 Allure 展示:

包 页面展示的是比 测试套 更高一个级别的分层,Junit 框架中对应的就是 package 再向下对应到 class、method,如图:

以上是 Allure 各个功能页面的介绍,可以看到 Allure 支持丰富的分层和可视化呈现,对于耗时、错误、统计等关键信息已经进行了科学地组织和展示。

和 Junit / Maven 结合使用 Allure

上节介绍的是 Allure 报告本身的展示和生成,但是这些信息的产生还是需要依赖与自动化测试框架的集成。下面就以 Java 世界最流行的测试框架 Junit 为例,结合 Maven 构建工具和 Eclipse 开发工具看下如何在编写完自动化测试用例后生成 Allure 测试结果。

创建项目

打开 Eclipse 后,首先创建一个 maven java 项目(确保本机 JDK、maven 安装使用正常),注意 Eclipse 默认 maven 项目的JDK版本是 1.5,此处需要修改为 1.8 版本以上。

打开项目 Java Build Path,删除原有 1.5 的库,添加 1.8 或以上的 JDK 库:

参考 Allure 官网 中与 Junit5 框架集成的介绍,修改 Maven 的 pom.xml 文件,安装对应的插件及配置,以下是本文示例使用的 pom 文件内容,对应依赖版本已更新到当前最新。

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>qiucao</groupId><artifactId>allureDemo</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>allureDemo</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><java.version>1.8</java.version><junit.api.version>5.4.0</junit.api.version><junit.jupiter.version>5.4.0</junit.jupiter.version><junit.platform.version>1.4.0</junit.platform.version><aspectj.version>1.9.3.RC1</aspectj.version><allure.version>2.9.0</allure.version></properties><dependencies><!-- Test API(s) --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.api.version}</version> <scope>test</scope> </dependency> <!-- Test engine(s) --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>${junit.api.version}</version> <scope>test</scope></dependency> <!-- Allure插件 --> <dependency> <groupId>io.qameta.allure</groupId> <artifactId>allure-junit5</artifactId> <version>${allure.version}</version> </dependency> </dependencies><build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.0.0-M3</version> <configuration> <argLine> -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar" </argLine> <systemProperties> <property> <name>junit.jupiter.extensions.autodetection.enabled</name> <value>true</value> </property> <!-- 指定allure结果目录 --> <property> <name>allure.results.directory</name> <value>${project.build.directory}/allure-results</value> </property> <!-- allure外链配置 --> <property> <name>allure.link.qiucao.pattern</name> <value>/d/file/gt/2023-10/mlt1o0u3pza </property> <property> <name>allure.link.issue.pattern</name> <value>https://github.com/chengxiaqiucao/JUnit5-features-demo/issues/{}</value> </property> <property> <name>allure.link.tms.pattern</name> <value>https://testcasemanage.justExample.com/{}</value> </property> </systemProperties> </configuration> <dependencies> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectj.version}</version> </dependency> </dependencies> </plugin> <plugin> <groupId>io.qameta.allure</groupId> <artifactId>allure-maven</artifactId> <version>2.9</version> <configuration> <reportVersion>${allure.version}</reportVersion> <allureDownloadUrl>https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/${allure.version}/allure-commandline-${allure.version}.zip</allureDownloadUrl> </configuration> </plugin> </plugins> </build></project>

相关插件安装完成后,即可使用 Junit5 正常编写自动化测试,JUnit5 的使用本文不再详述。项目目录结构如图:

执行测试

用例编写完成,可使用 Eclipse 的 Junit5 执行测试,执行结果如图:

但此时我们并不能通过 Junit 报告生成 Allure result,如上面的 pom.xml 定义,Allure 和 junit5 的集成是通过 maven 插件实现的。所以我们要生成 Allure result,需要通过 Maven 来执行测试。

这里有一点需要注意,allure 默认的结果目录 allure results 会生成在项目目录,但这个目录执行 Maven 的 clean test 时并不会清空,所以一般需要手工将 allure results 目录配置 maven 的 target 目录下,可在 pom.xml 文件中添加如下配置实现:

<property> <name>allure.results.directory</name> <value>${project.build.directory}/allure-results</value></property>

执行 mvn clean test 运行测试,然后即可打开 Allure 报告,执行过程如图:

注解功能深度定制 Allure 报告

Allure 可以通过注解机制来和 Junit5 框架进行深度融合,以下我们来介绍如何使用相关的注解来将对应的内容展示在 Allure 报告中。

设置用例描述

如图是 Allure 报告中展示的用例描述信息:

对应使用的是 @@Description 注解,代码中如:

@Test@DisplayName("Allure描述")@Story("Allure注解描述")@Description("失败用例,此处为描述信息")@Severity(SeverityLevel.CRITICAL)void addDescription() { Assertions.assertTrue(false);}设置作者信息

Allure 可以对测试类设置作者信息:

通过 @Owner 注解标记,代码如下:

@Owner("城下秋草")public class AllureTest {}用例步骤分解

如图是 Allure 报告中对于用例按步骤分解的示例:

这是通过在用例中调用对应的 Step 方法,在步骤方法中添加 @Step 注解实现的:

@Test@Story("Allure添加步骤")@Description("用例包含多个步骤")@Severity(SeverityLevel.NORMAL)void multiSteps() { step001(); step002(); step003();}@Step("用例步骤一")void step001() {}@Step("用例步骤二")void step002() {}@Step("用例步骤三")void step003() {}按功能分级

如之前的介绍,按敏捷研发中需求的分级实践,Allure 也支持通过相应的功能分级注解来对用例进行标记

对应到代码中,使用 @Epic、@Feature、@Story、@Test、@Step来进行分级对应,如:

@Epic(value = "Allure测试报告演示Demo")@Feature("演示Allure中的注解定制")public class AllureTest {@Test@Story("Allure添加步骤")@Description("用例包含多个步骤")@Severity(SeverityLevel.NORMAL)void multiSteps() {step001();step002();step003();}@Step("用例步骤一")void step001() {}@Step("用例步骤二")void step002() {}@Step("用例步骤三")void step003() {}} 添加附件

对于执行中需要附加的一些补充信息,可以通过调用使用了 @Attachment 注解的方法来携带。

下图是一个输出代码中指定内容的示例:

对应的代码:

@Test@Story("Junit携带附件")@Description("附件直接输出内容")public void simpleTestWithAttachments() throws Exception { assertThat(2, is(2)); makeAttach();}@Attachmentpublic String makeAttach() { return "yeah, 2 is 2";}

下图是携带外部 csv 文件作为附件的示例:

对应代码如下:

@Description("携带文件作为附件")@Test@Story("Junit携带附件")public void csvAttachmentTest() throws Exception { saveCsvAttachment();}@Attachment(value = "Sample csv attachment", type = "text/csv")public byte[] saveCsvAttachment() throws URISyntaxException, IOException { URL resource = getClass().getClassLoader().getResource("sample.csv"); if (resource == null) { fail("Couldn't find resource 'sample.csv'"); } return Files.readAllBytes(Paths.get(resource.toURI()));}支持外部链接

Allure 也支持在报告中展示当前用例和外部系统的关联,目前主要包含三类不同外部链接:

issueTmsLinkLink

分别使用不同的图标,来对应问题、外部用例管理系统、参考链接。要使用外部链接,需要针对性地在 pom.xml 中定义相应的配置,{}中定义的是显示在 allure 报告中的 ID,和配置信息中的属性对应。以下是本例中使用的配置:

<!-- allure外链配置 --><property> <name>allure.link.qiucao.pattern</name> <value>/d/file/gt/2023-10/mlt1o0u3pza</property><property> <name>allure.link.issue.pattern</name> <value>https://github.com/chengxiaqiucao/JUnit5-features-demo/issues/{}</value></property><property> <name>allure.link.tms.pattern</name> <value>https://testcasemanage.justExample.com/{}</value></property>

在代码分别使用 @Issue、 @TmsLink、 Link 注解来定义显示的信息:

@Test@Story("Allure外部链接")@Description("失败用例关联issue")@Severity(SeverityLevel.BLOCKER)@Issue("1")void testIssues() { Assertions.assertEquals(2,3);}@Test@Story("Allure外部链接")@Description("关联用例管理系统用例链接")@Severity(SeverityLevel.MINOR)@TmsLink("Case001")void testTmsLink() { Assertions.assertEquals(2,2);}@Test@Story("Allure外部链接")@Description("关联外部资源链接")@Severity(SeverityLevel.MINOR)@Link(name = "5c83d2aa6d5f670edc43c606", type = "qiucao")void testLink() { Assertions.assertEquals(2,2);}

Allure 报告中展示效果如下:

环境定制

在 Allure 报告的总览页面,可以展示当前执行的环境信息,这是通过配置环境属性文件environment.properties实现的,该文件需要位于 allure results 目录下,文件内容如:

env = regressiontools = Allure-Junit5version = 2.10.0类别定制

前面说过,还可以自定义类别信息来在报告中进行类别分类,这是通过类别配置文件 categories.json 配置实现的,也需要位于 allure results 目录下,类别定义主要是将类别名称和对应的执行状态进行关联,对于问题用例,还可以通过正则表达式抓取指定输出内容的用例进行分类。本例中文件内容如:

[ { "name": "成功执行的测试", "matchedStatuses": ["passed"] }, { "name": "匹配信息不一致", "messageRegex": ".*expect.*", "matchedStatuses": ["broken", "failed"] }, { "name": "未找到对应类", "traceRegex": ".*FileNotFoundException.*", "matchedStatuses": ["broken"]}, { "name": "执行失败的用例", "matchedStatuses": ["broken","failed"] }]

报告中效果:

和 Jenkins 的集成

除了在执行自动化测试后手工来执行生成 Allure 报告,大多数情况下,我们更希望在执行后自动完成报告的生成。如持续集成场景,在自动化调度完成测试后,将测试报告自动生成出来,所幸 Allure 也提供了对持续集成工具的良好支持。以最流行的 Jenkins 为例:

插件安装

Jenkins的官方插件库中包含有 Allure 插件,从插件配置中选中该插件并更新安装即可。

maven settings 配置

因为我们使用的 Junit 插件依赖 maven,所以 Jenkins 中还需要配置 Maven:

JDK 路径配置

同样,必须要配置 JDK 支持:

maven 路径配置

配置 maven 的安装路径:

Allure 路径配置

配置 Allure 命令行安装路径:

创建任务

在Jenkins 创建一个 maven 项目的构建任务:

任务配置 maven 执行命令

在 Build 部分配置 maven 的执行命令,即 clean test:

设置项目路径

Jenkins 默认调用本地工作空间,所以还需要选中自定义工作空间设置项目空间的实际路径:

Allure 配置

在 Post-Build Actions 部分选中 Allure Report,并配置结果路径和报告生成路径:

完成以上配置并保存后,即完成了自动化测试任务的创建。

执行和报告生成

此时在刚创建的任务中执行 立即构建,即刻触发任务执行。数次构建任务触发后,即可看到任务执行的趋势图。进入 Allure Report 可查看详细的 Allure 报告。任务界面如图:

以上就是和 Jenkins 结合生成 Allure 报告的使用方法。 Jenkins 工具本身的调度和通知等功能,此处不再赘述,在 《玩转 PostMan:自动化篇》 中也有比较详细的说明。

结语

以上就是对测试报告框架 Allure 的介绍,无论我们是想尽可能全面、美观地将测试结果呈现给用户,还是丰富我们测试报告的内容组织,或者希望在持续集成工具链上把测试情况进行专业地呈现;Allure 无疑都是测试同学体现专( zhuang )业 ( bi )性的利器,希望本文可以给大家在自动化测试实施的报告框架选择上提供一个有益的参考。

专家表示高颜值不易感染新冠

最近关于一条“高颜值更不容易感染新冠”的研究报告刷爆了和社交平台,据封面新闻,2022年12月12日报道,四川省新冠肺炎医疗救治专家组成员,第九批援鄂抗疫医疗专家余德海表示虽然没有准确的科学依据,但有一定的道理,好家伙,这个消息一出,网友们纷纷炸锅,新冠物理攻击怎么还附带精神攻击了呢?得新冠只怪自己长得丑?拿出镜子一看,我要阳了,

哈哈,也有网友表示那么明星张歆艺她们是怎么回事,她们是明星,颜值在线,不也得了新冠,得了新冠不精身体受到伤害,连精神也遭到了暴击。那么颜值高不易得新冠的内在逻辑在哪?专家是这样说的。

余德海表示,“颜值高” 、“长得好看”通常意义上指的是一个人的状态比较好

中医上也可表示一个人的“先天之本”很足一定程度上能够反映出他“吃得好、睡得好、心态好”也能显示出他的健康状态较好,说来说去,问题不在于颜值的高低,而在于大家的身体状况跟精神面貌,病毒哪会绕着颜值高的人走,无论高矮胖瘦,白富美丑,富贵贫贱,谁不注重防护,谁就更容易感染,谁不注重锻炼,谁的免疫力就低下,谁整天担心受怕,精神低迷,谁就更难受,防疫新形势下,有人“杨康”,有人“杨过”,也有人“王重阳”,但大家不用害怕,只要我们用乐观的心态去面对,才是取得胜利的法宝。