更新allure测试报告logo

This commit is contained in:
floraachy
2025-08-25 09:29:12 +08:00
parent 15baacaf7d
commit a4243cab11
18 changed files with 65 additions and 64 deletions

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 563.24 108.04"><defs><style>.cls-1,.cls-2{fill-rule:evenodd;}.cls-1{fill:url(#未命名的渐变_12);}.cls-2{fill:#fffdfd;}</style><linearGradient id="未命名的渐变_12" y1="54.02" x2="169.98" y2="54.02" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6dffff"/><stop offset="1" stop-color="#0080ff"/></linearGradient></defs><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path class="cls-1" d="M125.24,33.3l-4.56-6.22-4,2V79L120,80.75V75.21l5.24,8.48,4.25.66V23.69l-4.25,1.64Zm-94,51.05,9.48-4.74V28.43l-9.48-4.74ZM96.3,90.81l8.53,5.08V9.48L96.3,14.56ZM84.06,0H72.21V108H90.35V97.32H84.06ZM45.66,22.39l4.69,1.73V95.79l8.57-4.43V27.83l4.59,1.65V19.81L45.66,9.48ZM0,80.68,20.61,70.24V50.58l-9.79-1v6.91h3.92v6.67L8,66.21V45l12.65,2.29V39.22L0,32.4Zm152.6-24.4L167.79,32.4l-11.33,1.23-7.54,10V37l-8.33,2V74.9l8.33,1.74V69.76L157,80l13,.65Z"/><path class="cls-2" d="M252.36,18.32,256,12.18H197.73V59.31h36.53l5-5v5h16.53V30.37H226.9V36.6h12.32V53.16H214.67V18.32Zm34.47-6.23h-16V22.26h16Zm0,14h-16V59.23h16ZM336.5,59.23,340,53.49h-13.8V32.1h10.49l4-5.91H326.17V15.37H310.22V26.19H301.7V32.1h8.52V59.23Zm35.79-47h-16.7V59.31H399.4l3.47-6.15H372.29ZM433.7,26.11h-16V59.23h16Zm0-14h-16V22.26h16Zm14.87,47h15.95V31.93h10l5.54-5.9H448.57Zm31.49,0h15.79V26H480.06Zm46.62-17.54,17.11,17.71h17.85L543.7,40.13l18.27-14H542.22l-15.54,11.4V12.09H510.73V59.23h15.95ZM283,86.7H278.8a26.62,26.62,0,0,0,1.09-3.9c.2-1.07.31-1.64.33-1.72V78.19h6.16V75.07H274.75v3.12h2.67v2.53c0,.22-.12.7-.27,1.45a24.55,24.55,0,0,1-.75,2.69c-.34,1-.78,2.16-1.31,3.36a20.9,20.9,0,0,1-2,3.5l2.17,1.94c.21-.29.41-.58.58-.87s.36-.58.55-.87v12.66h6.25a2.94,2.94,0,0,0,2.28-1,3.63,3.63,0,0,0,.93-2.53V86.14H283ZM283,101c0,.29-.14.44-.42.44h-3.42V89.82H283Zm19.31-18.48h-1.53l2.56-3.81V76.29H292.56a12.05,12.05,0,0,0,.64-1.3l-2.49-1.39a21.16,21.16,0,0,1-1.31,2.49c-.5.82-1,1.55-1.41,2.18s-1,1.36-1.58,2.18l2.06,2s.29-.35.73-.91a24.75,24.75,0,0,0,1.51-2.17h8.71l-2.09,3.12h-9.71V93.69a27.82,27.82,0,0,1-.23,3.51c-.16,1.18-.33,2.24-.52,3.19s-.44,2-.74,3.24l1.31.48,1.35.47s0-.22.15-.57.2-.82.33-1.39.27-1.22.41-2,.27-1.53.39-2.38h4.66v5.5h2.81v-5.5h4.8v2.57q0,.48-.42.48h-1.57v3.08H302a2.91,2.91,0,0,0,2.27-1,3.63,3.63,0,0,0,.93-2.53V82h-2.81Zm-7.61,12.63h-4.34c0-.27,0-.51,0-.75s0-.48,0-.74V91.57h4.3Zm0-6.73h-4.3V85.67h4.3Zm7.61,6.73h-4.8v-3.6h4.8Zm0-6.73h-4.8V85.67h4.8Zm21-.55,7.53,3.4,1-2.89L324.35,85Zm11.84-3.21-7.54-3.56L326.52,84l7.53,3.52Zm1.17-11.24-2.49,1.43.89,1.86h-14v6.84h2.81V79.85h24.89v3.56h2.81V76.17h-2.81v.56H337.86Zm2.84,15.24,0-.2V81.4H336.4V88a11.64,11.64,0,0,1-.8,2,17.29,17.29,0,0,1-1.08,1.86H320.65V95h11.13a25.26,25.26,0,0,1-3.7,2.81,39.35,39.35,0,0,1-3.54,2c-1.08.53-2,.93-2.68,1.21l-1.1.42.39,1.46.39,1.5.85-.31c.5-.19,1.13-.44,1.9-.77s1.65-.76,2.62-1.27A34.34,34.34,0,0,0,333,97.9,23.67,23.67,0,0,0,335.85,95H339l-1.06,2.17,11.95,7.24,1.35-2.73L340.17,95h11.41V91.88h-13.7A15.51,15.51,0,0,0,339.17,88.68Zm94.69-10.77h5V74.79H411.28v3.12h5.65v7.53c0,.29,0,.56,0,.83s0,.54-.05.82h-7.72v3.13h7.26a28.26,28.26,0,0,1-1.5,4.69c-.61,1.46-1.21,2.74-1.79,3.84a27.5,27.5,0,0,1-1.53,2.59l-.69,1,2.17,2c0-.08.33-.5.85-1.25a32.15,32.15,0,0,0,1.78-3,47.5,47.5,0,0,0,2-4.41,28.4,28.4,0,0,0,1.54-5.42h11.81v14.09h2.81V90.22H441V87.09h-7.14Zm-2.81,9.18H419.67c0-.28,0-.56.05-.82s0-.54,0-.83V77.91h11.31Zm53.36,5.6a3.67,3.67,0,0,0,.93-2.52V79.7h-2.81v.71h-5.94l.78-1.43L475,77.32l-1.7,3.09h-4.38V93.74h6.79v7.32a.44.44,0,0,1-.12.32.41.41,0,0,1-.3.12h-2.07v3.12h2.1a2.93,2.93,0,0,0,2.28-1.05,3.68,3.68,0,0,0,.92-2.51V93.74h3.63A2.9,2.9,0,0,0,484.41,92.69Zm-12.69-9.16h10.81v2.14H471.72Zm0,7.09V88.8h10.81v1.38c0,.29-.13.44-.39.44Zm-9-11.12-5.23-5.19-1.85,2.3,5.2,5.18Zm7.79,15a23.78,23.78,0,0,1-.79,2.69c-.28.79-.64,1.7-1.08,2.71A25.81,25.81,0,0,1,467,103l2.35,1.74a26.83,26.83,0,0,0,1.79-3.42c.49-1.12.89-2.13,1.2-3s.53-1.6.67-2.16a9.24,9.24,0,0,0,.21-.91Zm-10.35-2.33-4.84,11,2.49,1.34,4.87-11Zm20.37,3.28,3.34,9,2.6-1.18-3.38-9Zm-13.26-18.2h19.17V74.12h-22V92.51a10.92,10.92,0,0,1-.41,2.83,30.11,30.11,0,0,1-1,3c-.38,1-.77,1.91-1.16,2.75s-.71,1.49-.94,1.94l2.42,1.58s.13-.27.33-.65.45-.89.73-1.52.6-1.36.92-2.16.63-1.65.92-2.53a23.12,23.12,0,0,0,.7-2.69,13.44,13.44,0,0,0,.27-2.6ZM460.81,90.1l1.88-2.29-5.23-5.19-1.85,2.3Zm-82.59-3.7a5.5,5.5,0,1,0,5.53,5.5A5.52,5.52,0,0,0,378.22,86.4ZM198.36,90.8h57.15V88.6H198.36Zm307.73-2.2v2.2h57.15V88.6Z"/></g></g></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1756085021373" class="icon" viewBox="0 0 3372 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8805" xmlns:xlink="http://www.w3.org/1999/xlink" width="658.59375" height="200"><path d="M2437.565217 422.956522h-278.260869l-22.26087-55.652174h300.521739v55.652174zM1936.695652 912.695652h-200.347826l44.521739-89.043478V144.695652l155.826087-44.521739v812.521739zM1981.217391 100.173913h155.826087v812.521739h-155.826087z" p-id="8806" fill="#ffffff"></path><path d="M1741.913043 289.391304h211.478261v55.652174h-211.478261zM1953.391304 623.304348l-211.478261 66.782609v-55.652174l211.478261-66.782609v55.652174zM2103.652174 100.173913h244.869565v55.652174h-244.869565z" p-id="8807" fill="#ffffff"></path><path d="M2437.565217 300.521739h-200.347826l44.521739-89.043478V100.173913h155.826087v200.347826zM2237.217391 912.695652h-111.304348l200.347827-489.73913h111.304347l-200.347826 489.73913z" p-id="8808" fill="#ffffff"></path><path d="M2304 912.695652h133.565217l-133.565217-434.086956h-133.565217l133.565217 434.086956zM2583.707826 512h612.173913v55.652174h-612.173913zM2973.273043 445.217391h-155.826086V144.695652l155.826086-44.521739v345.043478z" p-id="8809" fill="#ffffff"></path><path d="M2583.707826 512h155.826087v400.695652h-155.826087zM3040.055652 512h155.826087v400.695652h-155.826087z" p-id="8810" fill="#ffffff"></path><path d="M2583.707826 812.521739h612.173913v55.652174h-612.173913zM2550.316522 389.565217h678.956521v55.652174h-678.956521zM2661.62087 200.347826h523.130434v55.652174h-523.130434z" p-id="8811" fill="#ffffff"></path><path d="M2728.403478 356.173913h-155.826087l55.652174-222.608696h155.826087l-55.652174 222.608696zM1092.229565 912.695652h-155.826087l44.521739-667.826087h155.826087l-44.521739 667.826087z" p-id="8812" fill="#ffffff"></path><path d="M1103.36 300.521739h-155.826087v-55.652174h166.956522l-11.130435 55.652174zM980.925217 857.043478h144.695653v55.652174h-144.695653zM953.09913 133.565217h144.695653v66.782609h-144.695653zM1147.881739 200.347826h478.608696v55.652174h-478.608696z" p-id="8813" fill="#ffffff"></path><path d="M1626.490435 912.695652h-155.826087l-111.304348-812.521739h155.826087l111.304348 812.521739zM1159.012174 345.043478h222.608696v55.652174h-222.608696z" p-id="8814" fill="#ffffff"></path><path d="M1192.403478 389.565217h155.826087v467.478261h-155.826087z" p-id="8815" fill="#ffffff"></path><path d="M1426.142609 868.173913l-267.130435 44.521739v-55.652174l267.130435-44.521739v55.652174zM1543.012174 122.434783h66.782609v44.521739h-66.782609zM299.186087 133.565217h222.608696v55.652174h-222.608696zM823.652174 912.695652H645.565217l44.52174-89.043478V144.695652l133.565217-44.521739v812.521739z" p-id="8816" fill="#ffffff"></path><path d="M666.490435 756.869565h-100.173913V200.347826l100.173913-44.521739v601.043478zM254.664348 133.565217h89.043478v445.217392h-89.043478zM455.012174 133.565217h89.043478v445.217392h-89.043478z" p-id="8817" fill="#ffffff"></path><path d="M477.273043 289.391304l-111.304347 623.304348h-133.565218l111.304348-623.304348h133.565217z" p-id="8818" fill="#ffffff"></path><path d="M566.316522 912.695652h-133.565218l-55.652174-244.869565h133.565218l55.652174 244.869565zM210.142609 122.434783l11.130434 155.826087h-100.173913l-11.130434-155.826087M210.142609 322.782609l11.130434 155.826087h-100.173913l-11.130434-155.826087M226.838261 523.130435l-33.391304 389.565217h-100.173914l33.391305-389.565217h100.173913z" p-id="8819" fill="#ffffff"></path></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 563.24 108.04"><defs><style>.cls-1,.cls-2{fill-rule:evenodd;}.cls-1{fill:url(#未命名的渐变_12);}.cls-2{fill:#fffdfd;}</style><linearGradient id="未命名的渐变_12" y1="54.02" x2="169.98" y2="54.02" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6dffff"/><stop offset="1" stop-color="#0080ff"/></linearGradient></defs><g id="图层_2" data-name="图层 2"><g id="图层_1-2" data-name="图层 1"><path class="cls-1" d="M125.24,33.3l-4.56-6.22-4,2V79L120,80.75V75.21l5.24,8.48,4.25.66V23.69l-4.25,1.64Zm-94,51.05,9.48-4.74V28.43l-9.48-4.74ZM96.3,90.81l8.53,5.08V9.48L96.3,14.56ZM84.06,0H72.21V108H90.35V97.32H84.06ZM45.66,22.39l4.69,1.73V95.79l8.57-4.43V27.83l4.59,1.65V19.81L45.66,9.48ZM0,80.68,20.61,70.24V50.58l-9.79-1v6.91h3.92v6.67L8,66.21V45l12.65,2.29V39.22L0,32.4Zm152.6-24.4L167.79,32.4l-11.33,1.23-7.54,10V37l-8.33,2V74.9l8.33,1.74V69.76L157,80l13,.65Z"/><path class="cls-2" d="M252.36,18.32,256,12.18H197.73V59.31h36.53l5-5v5h16.53V30.37H226.9V36.6h12.32V53.16H214.67V18.32Zm34.47-6.23h-16V22.26h16Zm0,14h-16V59.23h16ZM336.5,59.23,340,53.49h-13.8V32.1h10.49l4-5.91H326.17V15.37H310.22V26.19H301.7V32.1h8.52V59.23Zm35.79-47h-16.7V59.31H399.4l3.47-6.15H372.29ZM433.7,26.11h-16V59.23h16Zm0-14h-16V22.26h16Zm14.87,47h15.95V31.93h10l5.54-5.9H448.57Zm31.49,0h15.79V26H480.06Zm46.62-17.54,17.11,17.71h17.85L543.7,40.13l18.27-14H542.22l-15.54,11.4V12.09H510.73V59.23h15.95ZM283,86.7H278.8a26.62,26.62,0,0,0,1.09-3.9c.2-1.07.31-1.64.33-1.72V78.19h6.16V75.07H274.75v3.12h2.67v2.53c0,.22-.12.7-.27,1.45a24.55,24.55,0,0,1-.75,2.69c-.34,1-.78,2.16-1.31,3.36a20.9,20.9,0,0,1-2,3.5l2.17,1.94c.21-.29.41-.58.58-.87s.36-.58.55-.87v12.66h6.25a2.94,2.94,0,0,0,2.28-1,3.63,3.63,0,0,0,.93-2.53V86.14H283ZM283,101c0,.29-.14.44-.42.44h-3.42V89.82H283Zm19.31-18.48h-1.53l2.56-3.81V76.29H292.56a12.05,12.05,0,0,0,.64-1.3l-2.49-1.39a21.16,21.16,0,0,1-1.31,2.49c-.5.82-1,1.55-1.41,2.18s-1,1.36-1.58,2.18l2.06,2s.29-.35.73-.91a24.75,24.75,0,0,0,1.51-2.17h8.71l-2.09,3.12h-9.71V93.69a27.82,27.82,0,0,1-.23,3.51c-.16,1.18-.33,2.24-.52,3.19s-.44,2-.74,3.24l1.31.48,1.35.47s0-.22.15-.57.2-.82.33-1.39.27-1.22.41-2,.27-1.53.39-2.38h4.66v5.5h2.81v-5.5h4.8v2.57q0,.48-.42.48h-1.57v3.08H302a2.91,2.91,0,0,0,2.27-1,3.63,3.63,0,0,0,.93-2.53V82h-2.81Zm-7.61,12.63h-4.34c0-.27,0-.51,0-.75s0-.48,0-.74V91.57h4.3Zm0-6.73h-4.3V85.67h4.3Zm7.61,6.73h-4.8v-3.6h4.8Zm0-6.73h-4.8V85.67h4.8Zm21-.55,7.53,3.4,1-2.89L324.35,85Zm11.84-3.21-7.54-3.56L326.52,84l7.53,3.52Zm1.17-11.24-2.49,1.43.89,1.86h-14v6.84h2.81V79.85h24.89v3.56h2.81V76.17h-2.81v.56H337.86Zm2.84,15.24,0-.2V81.4H336.4V88a11.64,11.64,0,0,1-.8,2,17.29,17.29,0,0,1-1.08,1.86H320.65V95h11.13a25.26,25.26,0,0,1-3.7,2.81,39.35,39.35,0,0,1-3.54,2c-1.08.53-2,.93-2.68,1.21l-1.1.42.39,1.46.39,1.5.85-.31c.5-.19,1.13-.44,1.9-.77s1.65-.76,2.62-1.27A34.34,34.34,0,0,0,333,97.9,23.67,23.67,0,0,0,335.85,95H339l-1.06,2.17,11.95,7.24,1.35-2.73L340.17,95h11.41V91.88h-13.7A15.51,15.51,0,0,0,339.17,88.68Zm94.69-10.77h5V74.79H411.28v3.12h5.65v7.53c0,.29,0,.56,0,.83s0,.54-.05.82h-7.72v3.13h7.26a28.26,28.26,0,0,1-1.5,4.69c-.61,1.46-1.21,2.74-1.79,3.84a27.5,27.5,0,0,1-1.53,2.59l-.69,1,2.17,2c0-.08.33-.5.85-1.25a32.15,32.15,0,0,0,1.78-3,47.5,47.5,0,0,0,2-4.41,28.4,28.4,0,0,0,1.54-5.42h11.81v14.09h2.81V90.22H441V87.09h-7.14Zm-2.81,9.18H419.67c0-.28,0-.56.05-.82s0-.54,0-.83V77.91h11.31Zm53.36,5.6a3.67,3.67,0,0,0,.93-2.52V79.7h-2.81v.71h-5.94l.78-1.43L475,77.32l-1.7,3.09h-4.38V93.74h6.79v7.32a.44.44,0,0,1-.12.32.41.41,0,0,1-.3.12h-2.07v3.12h2.1a2.93,2.93,0,0,0,2.28-1.05,3.68,3.68,0,0,0,.92-2.51V93.74h3.63A2.9,2.9,0,0,0,484.41,92.69Zm-12.69-9.16h10.81v2.14H471.72Zm0,7.09V88.8h10.81v1.38c0,.29-.13.44-.39.44Zm-9-11.12-5.23-5.19-1.85,2.3,5.2,5.18Zm7.79,15a23.78,23.78,0,0,1-.79,2.69c-.28.79-.64,1.7-1.08,2.71A25.81,25.81,0,0,1,467,103l2.35,1.74a26.83,26.83,0,0,0,1.79-3.42c.49-1.12.89-2.13,1.2-3s.53-1.6.67-2.16a9.24,9.24,0,0,0,.21-.91Zm-10.35-2.33-4.84,11,2.49,1.34,4.87-11Zm20.37,3.28,3.34,9,2.6-1.18-3.38-9Zm-13.26-18.2h19.17V74.12h-22V92.51a10.92,10.92,0,0,1-.41,2.83,30.11,30.11,0,0,1-1,3c-.38,1-.77,1.91-1.16,2.75s-.71,1.49-.94,1.94l2.42,1.58s.13-.27.33-.65.45-.89.73-1.52.6-1.36.92-2.16.63-1.65.92-2.53a23.12,23.12,0,0,0,.7-2.69,13.44,13.44,0,0,0,.27-2.6ZM460.81,90.1l1.88-2.29-5.23-5.19-1.85,2.3Zm-82.59-3.7a5.5,5.5,0,1,0,5.53,5.5A5.52,5.52,0,0,0,378.22,86.4ZM198.36,90.8h57.15V88.6H198.36Zm307.73-2.2v2.2h57.15V88.6Z"/></g></g></svg>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1756085021373" class="icon" viewBox="0 0 3372 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8805" xmlns:xlink="http://www.w3.org/1999/xlink" width="658.59375" height="200"><path d="M2437.565217 422.956522h-278.260869l-22.26087-55.652174h300.521739v55.652174zM1936.695652 912.695652h-200.347826l44.521739-89.043478V144.695652l155.826087-44.521739v812.521739zM1981.217391 100.173913h155.826087v812.521739h-155.826087z" p-id="8806" fill="#ffffff"></path><path d="M1741.913043 289.391304h211.478261v55.652174h-211.478261zM1953.391304 623.304348l-211.478261 66.782609v-55.652174l211.478261-66.782609v55.652174zM2103.652174 100.173913h244.869565v55.652174h-244.869565z" p-id="8807" fill="#ffffff"></path><path d="M2437.565217 300.521739h-200.347826l44.521739-89.043478V100.173913h155.826087v200.347826zM2237.217391 912.695652h-111.304348l200.347827-489.73913h111.304347l-200.347826 489.73913z" p-id="8808" fill="#ffffff"></path><path d="M2304 912.695652h133.565217l-133.565217-434.086956h-133.565217l133.565217 434.086956zM2583.707826 512h612.173913v55.652174h-612.173913zM2973.273043 445.217391h-155.826086V144.695652l155.826086-44.521739v345.043478z" p-id="8809" fill="#ffffff"></path><path d="M2583.707826 512h155.826087v400.695652h-155.826087zM3040.055652 512h155.826087v400.695652h-155.826087z" p-id="8810" fill="#ffffff"></path><path d="M2583.707826 812.521739h612.173913v55.652174h-612.173913zM2550.316522 389.565217h678.956521v55.652174h-678.956521zM2661.62087 200.347826h523.130434v55.652174h-523.130434z" p-id="8811" fill="#ffffff"></path><path d="M2728.403478 356.173913h-155.826087l55.652174-222.608696h155.826087l-55.652174 222.608696zM1092.229565 912.695652h-155.826087l44.521739-667.826087h155.826087l-44.521739 667.826087z" p-id="8812" fill="#ffffff"></path><path d="M1103.36 300.521739h-155.826087v-55.652174h166.956522l-11.130435 55.652174zM980.925217 857.043478h144.695653v55.652174h-144.695653zM953.09913 133.565217h144.695653v66.782609h-144.695653zM1147.881739 200.347826h478.608696v55.652174h-478.608696z" p-id="8813" fill="#ffffff"></path><path d="M1626.490435 912.695652h-155.826087l-111.304348-812.521739h155.826087l111.304348 812.521739zM1159.012174 345.043478h222.608696v55.652174h-222.608696z" p-id="8814" fill="#ffffff"></path><path d="M1192.403478 389.565217h155.826087v467.478261h-155.826087z" p-id="8815" fill="#ffffff"></path><path d="M1426.142609 868.173913l-267.130435 44.521739v-55.652174l267.130435-44.521739v55.652174zM1543.012174 122.434783h66.782609v44.521739h-66.782609zM299.186087 133.565217h222.608696v55.652174h-222.608696zM823.652174 912.695652H645.565217l44.52174-89.043478V144.695652l133.565217-44.521739v812.521739z" p-id="8816" fill="#ffffff"></path><path d="M666.490435 756.869565h-100.173913V200.347826l100.173913-44.521739v601.043478zM254.664348 133.565217h89.043478v445.217392h-89.043478zM455.012174 133.565217h89.043478v445.217392h-89.043478z" p-id="8817" fill="#ffffff"></path><path d="M477.273043 289.391304l-111.304347 623.304348h-133.565218l111.304348-623.304348h133.565217z" p-id="8818" fill="#ffffff"></path><path d="M566.316522 912.695652h-133.565218l-55.652174-244.869565h133.565218l55.652174 244.869565zM210.142609 122.434783l11.130434 155.826087h-100.173913l-11.130434-155.826087M210.142609 322.782609l11.130434 155.826087h-100.173913l-11.130434-155.826087M226.838261 523.130435l-33.391304 389.565217h-100.173914l33.391305-389.565217h100.173913z" p-id="8819" fill="#ffffff"></path></svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1756085021373" class="icon" viewBox="0 0 3372 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8805" xmlns:xlink="http://www.w3.org/1999/xlink" width="658.59375" height="200"><path d="M2437.565217 422.956522h-278.260869l-22.26087-55.652174h300.521739v55.652174zM1936.695652 912.695652h-200.347826l44.521739-89.043478V144.695652l155.826087-44.521739v812.521739zM1981.217391 100.173913h155.826087v812.521739h-155.826087z" p-id="8806" fill="#f4ea2a"></path><path d="M1741.913043 289.391304h211.478261v55.652174h-211.478261zM1953.391304 623.304348l-211.478261 66.782609v-55.652174l211.478261-66.782609v55.652174zM2103.652174 100.173913h244.869565v55.652174h-244.869565z" p-id="8807" fill="#f4ea2a"></path><path d="M2437.565217 300.521739h-200.347826l44.521739-89.043478V100.173913h155.826087v200.347826zM2237.217391 912.695652h-111.304348l200.347827-489.73913h111.304347l-200.347826 489.73913z" p-id="8808" fill="#f4ea2a"></path><path d="M2304 912.695652h133.565217l-133.565217-434.086956h-133.565217l133.565217 434.086956zM2583.707826 512h612.173913v55.652174h-612.173913zM2973.273043 445.217391h-155.826086V144.695652l155.826086-44.521739v345.043478z" p-id="8809" fill="#f4ea2a"></path><path d="M2583.707826 512h155.826087v400.695652h-155.826087zM3040.055652 512h155.826087v400.695652h-155.826087z" p-id="8810" fill="#f4ea2a"></path><path d="M2583.707826 812.521739h612.173913v55.652174h-612.173913zM2550.316522 389.565217h678.956521v55.652174h-678.956521zM2661.62087 200.347826h523.130434v55.652174h-523.130434z" p-id="8811" fill="#f4ea2a"></path><path d="M2728.403478 356.173913h-155.826087l55.652174-222.608696h155.826087l-55.652174 222.608696zM1092.229565 912.695652h-155.826087l44.521739-667.826087h155.826087l-44.521739 667.826087z" p-id="8812" fill="#f4ea2a"></path><path d="M1103.36 300.521739h-155.826087v-55.652174h166.956522l-11.130435 55.652174zM980.925217 857.043478h144.695653v55.652174h-144.695653zM953.09913 133.565217h144.695653v66.782609h-144.695653zM1147.881739 200.347826h478.608696v55.652174h-478.608696z" p-id="8813" fill="#f4ea2a"></path><path d="M1626.490435 912.695652h-155.826087l-111.304348-812.521739h155.826087l111.304348 812.521739zM1159.012174 345.043478h222.608696v55.652174h-222.608696z" p-id="8814" fill="#f4ea2a"></path><path d="M1192.403478 389.565217h155.826087v467.478261h-155.826087z" p-id="8815" fill="#f4ea2a"></path><path d="M1426.142609 868.173913l-267.130435 44.521739v-55.652174l267.130435-44.521739v55.652174zM1543.012174 122.434783h66.782609v44.521739h-66.782609zM299.186087 133.565217h222.608696v55.652174h-222.608696zM823.652174 912.695652H645.565217l44.52174-89.043478V144.695652l133.565217-44.521739v812.521739z" p-id="8816" fill="#f4ea2a"></path><path d="M666.490435 756.869565h-100.173913V200.347826l100.173913-44.521739v601.043478zM254.664348 133.565217h89.043478v445.217392h-89.043478zM455.012174 133.565217h89.043478v445.217392h-89.043478z" p-id="8817" fill="#f4ea2a"></path><path d="M477.273043 289.391304l-111.304347 623.304348h-133.565218l111.304348-623.304348h133.565217z" p-id="8818" fill="#f4ea2a"></path><path d="M566.316522 912.695652h-133.565218l-55.652174-244.869565h133.565218l55.652174 244.869565zM210.142609 122.434783l11.130434 155.826087h-100.173913l-11.130434-155.826087M210.142609 322.782609l11.130434 155.826087h-100.173913l-11.130434-155.826087M226.838261 523.130435l-33.391304 389.565217h-100.173914l33.391305-389.565217h100.173913z" p-id="8819" fill="#f4ea2a"></path></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1756085021373" class="icon" viewBox="0 0 3372 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8805" xmlns:xlink="http://www.w3.org/1999/xlink" width="658.59375" height="200"><path d="M2437.565217 422.956522h-278.260869l-22.26087-55.652174h300.521739v55.652174zM1936.695652 912.695652h-200.347826l44.521739-89.043478V144.695652l155.826087-44.521739v812.521739zM1981.217391 100.173913h155.826087v812.521739h-155.826087z" p-id="8806" fill="#1afa29"></path><path d="M1741.913043 289.391304h211.478261v55.652174h-211.478261zM1953.391304 623.304348l-211.478261 66.782609v-55.652174l211.478261-66.782609v55.652174zM2103.652174 100.173913h244.869565v55.652174h-244.869565z" p-id="8807" fill="#1afa29"></path><path d="M2437.565217 300.521739h-200.347826l44.521739-89.043478V100.173913h155.826087v200.347826zM2237.217391 912.695652h-111.304348l200.347827-489.73913h111.304347l-200.347826 489.73913z" p-id="8808" fill="#1afa29"></path><path d="M2304 912.695652h133.565217l-133.565217-434.086956h-133.565217l133.565217 434.086956zM2583.707826 512h612.173913v55.652174h-612.173913zM2973.273043 445.217391h-155.826086V144.695652l155.826086-44.521739v345.043478z" p-id="8809" fill="#1afa29"></path><path d="M2583.707826 512h155.826087v400.695652h-155.826087zM3040.055652 512h155.826087v400.695652h-155.826087z" p-id="8810" fill="#1afa29"></path><path d="M2583.707826 812.521739h612.173913v55.652174h-612.173913zM2550.316522 389.565217h678.956521v55.652174h-678.956521zM2661.62087 200.347826h523.130434v55.652174h-523.130434z" p-id="8811" fill="#1afa29"></path><path d="M2728.403478 356.173913h-155.826087l55.652174-222.608696h155.826087l-55.652174 222.608696zM1092.229565 912.695652h-155.826087l44.521739-667.826087h155.826087l-44.521739 667.826087z" p-id="8812" fill="#1afa29"></path><path d="M1103.36 300.521739h-155.826087v-55.652174h166.956522l-11.130435 55.652174zM980.925217 857.043478h144.695653v55.652174h-144.695653zM953.09913 133.565217h144.695653v66.782609h-144.695653zM1147.881739 200.347826h478.608696v55.652174h-478.608696z" p-id="8813" fill="#1afa29"></path><path d="M1626.490435 912.695652h-155.826087l-111.304348-812.521739h155.826087l111.304348 812.521739zM1159.012174 345.043478h222.608696v55.652174h-222.608696z" p-id="8814" fill="#1afa29"></path><path d="M1192.403478 389.565217h155.826087v467.478261h-155.826087z" p-id="8815" fill="#1afa29"></path><path d="M1426.142609 868.173913l-267.130435 44.521739v-55.652174l267.130435-44.521739v55.652174zM1543.012174 122.434783h66.782609v44.521739h-66.782609zM299.186087 133.565217h222.608696v55.652174h-222.608696zM823.652174 912.695652H645.565217l44.52174-89.043478V144.695652l133.565217-44.521739v812.521739z" p-id="8816" fill="#1afa29"></path><path d="M666.490435 756.869565h-100.173913V200.347826l100.173913-44.521739v601.043478zM254.664348 133.565217h89.043478v445.217392h-89.043478zM455.012174 133.565217h89.043478v445.217392h-89.043478z" p-id="8817" fill="#1afa29"></path><path d="M477.273043 289.391304l-111.304347 623.304348h-133.565218l111.304348-623.304348h133.565217z" p-id="8818" fill="#1afa29"></path><path d="M566.316522 912.695652h-133.565218l-55.652174-244.869565h133.565218l55.652174 244.869565zM210.142609 122.434783l11.130434 155.826087h-100.173913l-11.130434-155.826087M210.142609 322.782609l11.130434 155.826087h-100.173913l-11.130434-155.826087M226.838261 523.130435l-33.391304 389.565217h-100.173914l33.391305-389.565217h100.173913z" p-id="8819" fill="#1afa29"></path></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

2
run.py
View File

@@ -63,9 +63,7 @@ from utils.report_utils.allure_handle import generate_allure_report
def run(env, m, report):
try:
# ------------------------ 捕获日志----------------------------
LOG_LEVEL = "INFO"
capture_logs(level=LOG_LEVEL, filename=os.path.join(LOG_DIR, "service.log"))
logger.info(f"""\n\n
_ _ _ _____ _
__ _ _ __ (_) / \\ _ _| |_ __|_ _|__ ___| |_

View File

@@ -40,6 +40,7 @@ SEND_RESULT_TYPE = 0
# 指定日志收集级别
LOG_LEVEL = "DEBUG" # 可选值TRACE DEBUG INFO SUCCESS WARNING ERROR CRITICAL
LOG_LEVEL_STD = "SUCCESS"
"""
支持的日志级别:
TRACE: 最低级别的日志级别,用于详细追踪程序的执行。

View File

@@ -24,15 +24,15 @@ def case_control(request):
# 使用 request.getfixturevalue() 方法来获取测试用例函数的参数值
# 注意这里的"case"需要与@pytest.mark.parametrize("case", cases)中传递的保持一致
case = request.getfixturevalue("case")
logger.info("\n\n-----------------------------START-开始执行用例-----------------------------\n\n")
logger.info(f"\n-----------------------------START-开始执行用例- {case.get("id")} || {case.get("title")}-----------------------------")
# 添加用例标题作为allure中显示的用例标题
allure_title(case.get("title", ""))
if case.get("run") is None or case.get("run") is False:
reason = f"{case.get('title')}: 标记了该用例为false不执行\\n"
reason = f"{case.get("id")} || {case.get("title")}: 标记了该用例不执行run=False"
logger.warning(f"{reason}")
pytest.skip(reason)
yield
logger.info("\n\n-----------------------------END-用例执行完成-----------------------------\n\n")
logger.info("-----------------------------END-用例执行完成-----------------------------")
def pytest_collection_modifyitems(config, items):

View File

@@ -125,7 +125,7 @@ class AssertUtils:
expect_value = self.get_expect_value
message = str(self.get_message)
assert_type = self.get_assert_type
logger.debug(f"\nmessage: {message}\n"
logger.trace(f"\nmessage: {message}\n"
f"assert_type: {assert_type}\n"
f"expect_value: {expect_value}\n"
f"actual_value: {actual_value}\n")
@@ -150,7 +150,7 @@ class AssertHandle(AssertUtils):
else:
assert_list.append(v)
else:
logger.debug(f"断言数据为空或者不是字典格式,跳过断言!\n"
logger.trace(f"断言数据为空或者不是字典格式,跳过断言!\n"
f"断言数据:{self.assert_data}")
return assert_list

View File

@@ -45,7 +45,7 @@ def __load_yaml_data(file):
if os.path.basename(file) == "init_data.yaml" or os.path.basename(file) == "init_data.yml":
"""识别到init_data.yaml或者init_data.yml文件自动生成conftest.py文件"""
os.makedirs(os.path.dirname(file), exist_ok=True)
logger.debug(f"识别到init_data.yaml或者init_data.yml文件自动生成conftest.py文件")
logger.trace(f"识别到init_data.yaml或者init_data.yml文件自动生成conftest.py文件")
generate_conftest_file(
template_path=CONFTEST_TEMPLATE_DIR,
init_data=yaml_data,
@@ -74,7 +74,7 @@ def __load_yaml_data(file):
if os.path.basename(file) == "init_data.yaml" or os.path.basename(file) == "init_data.yml":
"""识别到init_data.yaml或者init_data.yml文件自动生成conftest.py文件"""
os.makedirs(os.path.dirname(file), exist_ok=True)
logger.debug(f"识别到init_data.yaml或者init_data.yml文件自动生成conftest.py文件")
logger.trace(f"识别到init_data.yaml或者init_data.yml文件自动生成conftest.py文件")
generate_conftest_file(
template_path=CONFTEST_TEMPLATE_DIR,
init_data=yaml_data,
@@ -208,7 +208,7 @@ def gen_case_file(filename, case_template_path, config, common_dependence, case_
# 这里是预计往 @pytest.mark.parametrize( 这一行的上面插入标记
if content.strip().startswith('@pytest.mark.parametrize('):
# 往测试用例模板中插入自定义标记
# logger.debug(f"获取到的pytest_markers{pytest_markers} {type(pytest_markers)}")
# logger.trace(f"获取到的pytest_markers{pytest_markers} {type(pytest_markers)}")
for case_marker in pytest_markers:
# 获取符合要求格式的自定义标记名称,并插入到测试模板中
marker = is_valid_marker(case_marker)

View File

@@ -20,10 +20,10 @@ def init_data():
运行测试之前,初始化数据;
运行测试之后,清理数据
"""
logger.debug(f"打印一下全局变量:{GLOBAL_VARS}")
logger.trace(f"打印一下全局变量:{GLOBAL_VARS}")
dependence_handler = CaseDependenceHandler(GLOBAL_VARS)
init_data = ${init_data}
logger.info("Start ----- 开始初始化数据...")
logger.debug("Start ----- 开始初始化数据...")
if init_data.get("setup"):
dependence_results = dependence_handler.case_dependence_handle(
case_dependence=init_data["setup"],
@@ -37,4 +37,4 @@ def init_data():
GLOBAL_VARS.update(dependence_results if dependence_results else {})
logger.info("End ----- 初始化数据完成!")
logger.debug("End ----- 初始化数据完成!")

View File

@@ -136,7 +136,7 @@ class DataHandle:
"""
for key, funcs in funcs.items(): # 遍历方法字典调用并替换
func = funcs[1]
# logger.debug("invoke func : ", func)
# logger.trace("invoke func : ", func)
try:
if "." in func:
if func.startswith("faker."):

View File

@@ -25,13 +25,13 @@ def json_extractor(obj, expr: str = '.'):
"""
try:
result = jsonpath(obj, expr)[0] if len(jsonpath(obj, expr)) == 1 else jsonpath(obj, expr)
logger.debug(f"\n提取对象:{obj}\n"
logger.trace(f"\n提取对象:{obj}\n"
f"提取表达式: {expr} \n"
f"提取值类型: {type(result)}\n"
f"提取结果:{result}\n")
return result
except Exception as e:
logger.debug(f"\n提取对象:{obj}\n"
logger.trace(f"\n提取对象:{obj}\n"
f"提取表达式: {expr}\n"
f"提取对象: {obj}\n"
f"错误信息:{e}\n")
@@ -48,13 +48,13 @@ def re_extract(obj: str, expr: str = '.'):
# 如果提取后的数据长度为1则取第一个元素返回str否则返回列表
result = re.findall(expr, obj)[0] if len(re.findall(expr, obj)) == 1 else re.findall(expr, obj)
# 由于提取出来的数据都是str格式将eval一样还原数据格式
logger.debug(f"\n提取对象:{obj}\n"
logger.trace(f"\n提取对象:{obj}\n"
f"提取表达式: {expr}\n"
f"提取值类型: {type(result)}\n"
f"提取结果:{result}\n")
return result
except Exception as e:
logger.debug(f"\n提取对象:{obj}\n"
logger.trace(f"\n提取对象:{obj}\n"
f"提取表达式: {expr}\n"
f"提取对象: {obj}\n"
f"错误信息:{e}\n")
@@ -69,7 +69,7 @@ def response_extract(response: Response, expr: str = '.'):
"""
try:
result = eval(expr)
logger.debug(f"\n提取表达式: {expr}\n"
logger.trace(f"\n提取表达式: {expr}\n"
f"提取值类型: {type(result)}\n"
f"提取结果:{result}\n")
# 将从Response对象提取的cookiejar对象转换为dict格式 避免后续使用cookies的时候出现类型错误
@@ -77,7 +77,7 @@ def response_extract(response: Response, expr: str = '.'):
result = utils.dict_from_cookiejar(result)
return result
except Exception as e:
logger.debug(f"\n提取表达式: {expr}\n"
logger.trace(f"\n提取表达式: {expr}\n"
f"提取对象: {response}\n"
f"错误信息:{e}\n")

View File

@@ -25,9 +25,9 @@ def get_test_results_from_from_allure_report(allure_html_path):
data = json.load(file)
case_count = data['statistic']
_time = data['time']
logger.debug(f"获取到的data是{data}")
logger.debug(f"获取到的_time是{data['time']}")
logger.debug(f"获取到的start是{_time['start']}")
logger.trace(f"获取到的data是{data}")
logger.trace(f"获取到的_time是{data['time']}")
logger.trace(f"获取到的start是{_time['start']}")
keep_keys = {"passed", "failed", "broken", "skipped", "total"}
test_results = {k: v for k, v in data['statistic'].items() if k in keep_keys}
# 判断运行用例总数大于0
@@ -56,7 +56,7 @@ def get_test_results_from_from_allure_report(allure_html_path):
env_data = json.load(file)
for data in env_data:
test_results[data['name']] = data["values"][0]
logger.debug(f"获取到的测试结果:{test_results}")
logger.trace(f"获取到的测试结果:{test_results}")
return test_results
except FileNotFoundError as e:
logger.error(f"程序中检查到您未生成allure报告通常可能导致的原因是allure环境未配置正确{e}")

View File

@@ -41,18 +41,18 @@ def push_allure_report(allure_report_dir: str, remote_url: str, username: str, p
repo_name = remote_url[:-4].split("/")[-1]
repo_path = os.path.join(os.path.dirname(allure_report_dir), repo_name)
print(f"本地仓库地址:{repo_path}")
logger.info(f"本地仓库地址:{repo_path}")
logger.debug(f"本地仓库地址:{repo_path}")
try:
# 检查目录是否存在
if os.path.exists(repo_path):
print(f"目录已存在,正在删除: {repo_path}")
logger.info(f"目录已存在,正在删除: {repo_path}")
logger.debug(f"目录已存在,正在删除: {repo_path}")
shutil.rmtree(repo_path) # 删除目录及其内容
# 重新创建目录
os.makedirs(repo_path)
logger.info(f"目录已重新创建: {repo_path}")
logger.debug(f"目录已重新创建: {repo_path}")
print(f"目录已重新创建: {repo_path}")
except Exception as e:
logger.error(f"操作失败: {e}")
@@ -62,27 +62,27 @@ def push_allure_report(allure_report_dir: str, remote_url: str, username: str, p
# -------------初始化本地仓库并提交代码 -----------------
subprocess.run(["git", "-C", repo_path, "init"], check=True)
print("初始化本地仓库成功")
logger.info("初始化本地仓库成功")
logger.debug("初始化本地仓库成功")
auth_remote_url = f"https://{username}:{password}@{remote_url.split("//")[-1]}"
print(f"添加远程仓库: {auth_remote_url}")
logger.info(f"添加远程仓库: {auth_remote_url}")
logger.debug(f"添加远程仓库: {auth_remote_url}")
subprocess.run(["git", "-C", repo_path, "remote", "add", "origin", auth_remote_url], check=True)
print("复制 Allure HTML报告所有文件到本地仓库")
logger.info("复制 Allure HTML报告所有文件到本地仓库")
logger.debug("复制 Allure HTML报告所有文件到本地仓库")
copy_all_files(src_dir=allure_report_dir, dst_dir=repo_path)
print("将更改添加到暂存区")
logger.info("将更改添加到暂存区")
logger.debug("将更改添加到暂存区")
subprocess.run(["git", "-C", repo_path, "add", "."], check=True)
print("提交更改")
logger.info("提交更改")
logger.debug("提交更改")
subprocess.run(["git", "-C", repo_path, "commit", "-m", message], check=True)
print("强制推送代码")
logger.info("强制推送代码")
logger.debug("强制推送代码")
subprocess.run(["git", "-C", repo_path, "push", "--force", "origin", branch], check=True)
print("Allure 报告推送成功!")

View File

@@ -44,7 +44,7 @@ def send_dingding(webhook_url, secret, title, content):
dingding = DingTalkBot(webhook_url=webhook_url, secret=secret)
res = dingding.send_markdown(title=title, text=content, is_at_all=True)
if res:
logger.info(f"发送钉钉通知成功~")
logger.debug(f"发送钉钉通知成功~")
else:
logger.error(f"发送钉钉通知失败~")
except Exception as e:
@@ -62,7 +62,7 @@ def send_wechat(webhook_url, content, attachment=None):
if attachment:
file = wechat.send_file(wechat.upload_file(attachment))
if file:
logger.info(f"发送企业微信通知(包括文本以及附件)成功~")
logger.debug(f"发送企业微信通知(包括文本以及附件)成功~")
else:
logger.error(f"发送企业微信通知(附件)失败~")
else:
@@ -80,7 +80,7 @@ def send_result(report_info: dict, report_path: str, attachment_path: str = None
"""
# 默认不发送任何通知
if SEND_RESULT_TYPE == NotificationType.DEFAULT.value:
logger.debug(f"SEND_RESULT_TYPE={SEND_RESULT_TYPE} 配置了不发送任何邮件")
logger.trace(f"SEND_RESULT_TYPE={SEND_RESULT_TYPE} 配置了不发送任何邮件")
return
results = get_test_results_from_from_allure_report(report_path)

View File

@@ -67,7 +67,7 @@ class BaseRequest:
传递的参数会被编码为JSON格式并包含在请求体中。
需要注意的是使用这种方式传递的参数必须是可序列化为JSON的数据类型如字典、列表、整数、浮点数、布尔值或None。对于不可序列化的数据类型如文件或其他自定义对象需要先进行序列化。
"""
logger.debug("发送请求:\n"
logger.trace("发送请求:\n"
"request_type=json\n"
f"method={method}\n"
f"url={url}\n"
@@ -90,7 +90,7 @@ class BaseRequest:
params: 这是通过URL传递参数的方式。所有传递的参数都会被编码到URL中。requests库会自动处理这些参数的编码。
需要注意的是,这种方式只适用于简单的键值对,对于复杂的数据结构,如列表或字典,需要先进行序列化。
"""
logger.debug("发送请求:\n"
logger.trace("发送请求:\n"
"request_type=params\n"
f"method={method}\n"
f"url={url}\n"
@@ -114,7 +114,7 @@ class BaseRequest:
这些参数通常需要通过requests库提供的data参数来传递并且在发送请求时需要设置Content-Type为application/x-www-form-urlencoded或multipart/form-data。
对于简单的键值对可以直接将它们作为字典传递给data参数对于复杂的数据结构需要先进行序列化。
"""
logger.debug("发送请求:\n"
logger.trace("发送请求:\n"
"request_type=data\n"
f"method={method}\n"
f"url={url}\n"
@@ -152,7 +152,7 @@ class BaseRequest:
返回:
- requests.Response: 发送请求后的响应对象。
"""
logger.debug("发送请求:\n"
logger.trace("发送请求:\n"
"request_type=file\n"
f"method={method}\n"
f"url={url}\n"
@@ -192,7 +192,7 @@ class BaseRequest:
@classmethod
def request_type_for_none(cls, method: Text, url: Text, headers: Optional[Dict], **kwargs):
"""处理 requestType 为 None"""
logger.debug("发送请求:\n"
logger.trace("发送请求:\n"
"request_type=none\n"
f"method={method}\n"
f"url={url}\n"
@@ -209,6 +209,6 @@ class BaseRequest:
@classmethod
def request_type_for_export(cls, method: Text, url: str, headers: Optional[Dict], **kwargs):
"""判断 requestType 为 export 导出类型"""
logger.debug("requestType 为 export 类型")
logger.trace("requestType 为 export 类型")
# todo 后续有需求再补充
return ""

View File

@@ -31,7 +31,7 @@ class CaseDependenceHandler:
for key, value in variables.items():
new_value = data_handle(value, self.source)
allure_step(f"依赖环境变量 --> {key}={new_value}")
logger.info(f"依赖环境变量 --> {key}={new_value}")
logger.debug(f"依赖环境变量 --> {key}={new_value}")
self.source.update({key: new_value})
def handle_interfaces(self, interfaces):
@@ -54,7 +54,7 @@ class CaseDependenceHandler:
sql = db_item["sql"]
sql_result = mysql.query_all(sql)
allure_step(f"依赖的数据库sql:{sql}, 查询结果:{sql_result}")
logger.info(f"依赖的数据库sql:{sql}, 查询结果:{sql_result}")
logger.debug(f"依赖的数据库sql:{sql}, 查询结果:{sql_result}")
db_item.pop("sql")
for extraction_type, extractions in db_item.items():
@@ -63,13 +63,13 @@ class CaseDependenceHandler:
res = json_extractor(sql_result, path)
self.source.update({key: res})
allure_step(f"通过jsonpath方式从数据库提取参数{key}:{res}")
logger.debug(f"通过jsonpath方式从数据库提取参数{key}:{res}")
logger.trace(f"通过jsonpath方式从数据库提取参数{key}:{res}")
elif extraction_type.lower() == "type_re":
for key, pattern in extractions.items():
res = re_extract(str(sql_result), pattern)
self.source.update({key: res})
allure_step(f"通过正则表达式从数据库提取参数:{key}:{res}")
logger.info(f"通过正则表达式从数据库提取参数:{key}:{res}")
logger.debug(f"通过正则表达式从数据库提取参数:{key}:{res}")
else:
logger.error(f"提取方式: {extraction_type} 错误仅支持type_jsonpath、type_re两种")
else:
@@ -81,7 +81,7 @@ class CaseDependenceHandler:
先处理环境变量依赖再处理接口依赖最后处理SQL依赖
"""
if not case_dependence:
logger.debug("跳过用例依赖处理")
logger.trace("跳过用例依赖处理")
allure_step("跳过用例依赖处理")
return self.source

View File

@@ -40,12 +40,12 @@ class RequestControl(BaseRequest):
"""
api_data = []
if os.path.isdir(api_file_path):
logger.debug(f"目标路径是一个目录:{api_file_path}")
logger.trace(f"目标路径是一个目录:{api_file_path}")
api_files = get_files(target=api_file_path, end=".yaml") + get_files(target=api_file_path, end=".yml")
for api_file in api_files:
api_data.append(load_yaml_file(api_file))
elif os.path.isfile(api_file_path):
logger.debug(f"目标路径是一个文件:{api_file_path}")
logger.trace(f"目标路径是一个文件:{api_file_path}")
api_data.append(load_yaml_file(api_file_path))
else:
@@ -56,7 +56,7 @@ class RequestControl(BaseRequest):
if api.get("teststeps"):
matching_api = next((item for item in api["teststeps"] if item["id"] == key), None)
if matching_api:
logger.info("\n----------匹配到的api----------\n"
logger.debug("\n----------匹配到的api----------\n"
f"类型:{type(matching_api)}"
f"值:{matching_api}\n")
return matching_api
@@ -162,7 +162,7 @@ class RequestControl(BaseRequest):
针请求前,对接口数据进行处理,识别用例数据中的关键字${xxxx},使用全局变量进行替换或者执行关键字中的方法替换为具体值
"""
try:
logger.debug(f"\n======================================================\n" \
logger.trace(f"\n======================================================\n" \
"-------------用例数据处理前--------------------\n"
f"用例ID: {type(request_data.get('id', None))} || {request_data.get('id', None)}\n" \
f"用例优先级(severity): {type(request_data.get('severity', None))} || {request_data.get('severity', None)}\n" \
@@ -198,7 +198,7 @@ class RequestControl(BaseRequest):
"case_dependence": request_data.get("case_dependence")
}
logger.debug("\n-------------用例数据处理后--------------------\n"
logger.trace("\n-------------用例数据处理后--------------------\n"
f"用例ID: {type(new_request_data.get('id', None))} || {new_request_data.get('id', None)}\n" \
f"用例优先级(severity): {type(new_request_data.get('severity', None))} || {new_request_data.get('severity', None)}\n" \
f"用例标题(title): {type(new_request_data.get('title', None))} || {new_request_data.get('title', None)}\n" \
@@ -215,7 +215,7 @@ class RequestControl(BaseRequest):
f"后置提取参数(extract): {type(new_request_data.get('extract', None))} || {new_request_data.get('extract', None)}\n" \
f"用例依赖(case_dependence): {type(new_request_data.get('case_dependence', None))} || {new_request_data.get('case_dependence', None)}\n"
"=====================================================")
logger.debug(new_request_data)
logger.trace(new_request_data)
return new_request_data
except Exception as e:
logger.error(f"接口数据处理异常:{e}")
@@ -256,7 +256,7 @@ class RequestControl(BaseRequest):
f"响应数据: {response_result}\n" \
f"响应耗时: {response_time_seconds} s || {response_time_millisecond} ms\n" \
+ "=" * 80
logger.info(_res)
logger.debug(_res)
allure_step(f"ID: {key}")
allure_step(f"标题: {title}")
allure_step(f"请求URL: {url}")
@@ -281,10 +281,10 @@ class RequestControl(BaseRequest):
"""
extract = api_data.get("extract")
if not extract:
logger.info(f"断言成功后不需要进行提取操作extract={extract}")
logger.debug(f"断言成功后不需要进行提取操作extract={extract}")
return None
logger.info(f"断言成功后需要进行提取操作extract={extract}")
logger.debug(f"断言成功后需要进行提取操作extract={extract}")
case_results = {}
response_results = {}
@@ -338,9 +338,9 @@ class RequestControl(BaseRequest):
response_results.update(extract_data(response, {k: v}))
result = {**case_results, **response_results, **database_results}
logger.info(f"--用例提取结果 --> {case_results} --")
logger.info(f"--响应提取结果 --> {response_results} --")
logger.info(f"--数据库提取结果 --> {database_results} --")
logger.debug(f"--用例提取结果 --> {case_results} --")
logger.debug(f"--响应提取结果 --> {response_results} --")
logger.debug(f"--数据库提取结果 --> {database_results} --")
return result
@@ -376,10 +376,10 @@ class RequestControl(BaseRequest):
response = self.send_request(new_api_data)
# 根据配置,增加接口请求等待时间。适应部分请求调用后,需要进行内置数据处理的问题
logger.debug(f"开始等待")
logger.trace(f"开始等待")
if new_api_data.get("wait_seconds"):
time.sleep(new_api_data["wait_seconds"])
logger.debug(f"结束等待")
logger.trace(f"结束等待")
new_api_data["status_code"] = response.status_code
new_api_data["response_time_seconds"] = round(response.elapsed.total_seconds(), 2)
@@ -401,6 +401,6 @@ class RequestControl(BaseRequest):
# 将接口请求参数payload的值保存到save_api_data中
save_api_data.update({"_payload": new_api_data["payload"]} if new_api_data.get("payload") else {})
logger.debug(f"接口请求完成后接口请求数据payload响应数据 & 提取数据 save_api_data={save_api_data}")
logger.trace(f"接口请求完成后接口请求数据payload响应数据 & 提取数据 save_api_data={save_api_data}")
allure_step(f"接口请求完成后接口请求数据payload响应数据 & 提取数据 save_api_data={save_api_data}")
return save_api_data