diff --git a/404.html b/404.html index 12a172e..b71eb2d 100644 --- a/404.html +++ b/404.html @@ -1,5 +1,5 @@ 404 页面没找到 - 洋葱的自留地 -

抱歉,您要查找的页面不存在。  -

0%
\ No newline at end of file diff --git a/about/index.html b/about/index.html index d5fc405..2d819a0 100644 --- a/about/index.html +++ b/about/index.html @@ -1,11 +1,11 @@ About - 洋葱的自留地

About

avatar

马甲 +">

About

avatar

马甲

Arthur Feng , 洋葱爱生活

爱好

宅,动漫,电影,游戏,美食,书

工作

2010-2015:武汉惠普企业服务交付有限公司:专职测试

2015-2018:杭州九言科技股份有限公司:业务测试负责人

2018-2019:杭州兑吧网络科技有限公司:天天趣闻测试负责人

2019-Now: 杭州柔造科技有限公司:测试主管

我自己眼中的我

80 后,奔三的 吃货一枚!

每个故事中都有一个胖子,我就是那个胖子!

强迫症患者,人人、 微博、GR 未读数大于 10 我会死!

少壮不努力,长大做挨踢!

学习 Python 中,宅男要拯救世界!

隐藏在眼镜后的小眼睛时常闪烁着智慧的光芒!

爱读书,自诩为 2B 的文艺青年!

部落血精灵牧师,For The Horde!

Cler,冰天雪地全身赤裸一丝不挂五体投地跪求种子!

艾未未债主,没被请去喝过茶!

单身,求御姐、萝莉、傲娇、女王拯救!

Wishlist

2023 -

  • 脱单
  • 自行车
  • 主机

  • 脱单
  • 自行车
  • 主机
0%
\ No newline at end of file +洋葱
0%
\ No newline at end of file diff --git a/archives/index.html b/archives/index.html index b77c9cc..a9d63b3 100644 --- a/archives/index.html +++ b/archives/index.html @@ -1,7 +1,7 @@ -归档 - 洋葱的自留地 -

归档 3

总计约 2.98K 字

2024

0%
\ No newline at end of file +洋葱
0%
\ No newline at end of file diff --git a/categories/android/index.html b/categories/android/index.html index 6c3aa80..cea5d8a 100644 --- a/categories/android/index.html +++ b/categories/android/index.html @@ -1,5 +1,5 @@ Android - 分类 - 洋葱的自留地 -

Android 1

2024

0%
\ No newline at end of file diff --git a/categories/android/index.xml b/categories/android/index.xml index 094371a..b71f05a 100644 --- a/categories/android/index.xml +++ b/categories/android/index.xml @@ -1,4 +1,4 @@ -Android - 分类 - 洋葱的自留地http://xiaolong.fun/categories/android/洋葱的自留地Hugo 0.137.0 & FixIt v0.3.14zh-CNTue, 05 Nov 2024 00:00:00 +0000Android App 集合http://xiaolong.fun/posts/awesome-android-app/Tue, 05 Nov 2024 00:00:00 +0000http://xiaolong.fun/posts/awesome-android-app/笔记Android<h2 id="system" class="heading-element"><span>System</span> +Android - 分类 - 洋葱的自留地http://xiaolong.fun/categories/android/洋葱的自留地7616145989362176075511352571992064Hugo 0.137.1 & FixIt v0.3.14zh-CNTue, 05 Nov 2024 00:00:00 +0000Android App 集合http://xiaolong.fun/posts/awesome-android-app/Tue, 05 Nov 2024 00:00:00 +0000http://xiaolong.fun/posts/awesome-android-app/笔记Android<img src="http://xiaolong.fun/images/posts/awesome-android-app/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><h2 id="system" class="heading-element"><span>System</span> <a href="#system" class="heading-mark"> <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> </a> @@ -9,4 +9,250 @@ </h4><ul> <li>下载地址: <a href="https://github.com/termux/termux-app/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/termux/termux-app/releases</a></li> <li>介绍: &ldquo;a terminal emulator application for Android OS extendible by variety of packages.&rdquo;</li> +</ul> +<h4 id="doodle" class="heading-element"><span>Doodle</span> + <a href="#doodle" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://f-droid.org/packages/xyz.zedler.patrick.doodle/"target="_blank" rel="external nofollow noopener noreferrer">https://f-droid.org/packages/xyz.zedler.patrick.doodle/</a></li> +<li>介绍: &ldquo;Colorful live wallpapers with auto dark mode and power-efficient animations&rdquo;</li> +</ul> +<h4 id="materialfiles" class="heading-element"><span>MaterialFiles</span> + <a href="#materialfiles" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/zhanghai/MaterialFiles/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/zhanghai/MaterialFiles/releases</a></li> +<li>介绍: &ldquo;Material Design file manager for Android.&rdquo;</li> +</ul> +<h4 id="appops" class="heading-element"><span>AppOps</span> + <a href="#appops" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://appops.rikka.app/download/"target="_blank" rel="external nofollow noopener noreferrer">https://appops.rikka.app/download/</a></li> +<li>介绍: &ldquo;Control the hidden appops conveniently&rdquo;</li> +</ul> +<h4 id="shizuku" class="heading-element"><span>Shizuku</span> + <a href="#shizuku" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://shizuku.rikka.app/zh-hans/"target="_blank" rel="external nofollow noopener noreferrer">https://shizuku.rikka.app/zh-hans/</a></li> +<li>介绍: &ldquo;让你的应用直接使用系统 API&rdquo;</li> +</ul> +<h4 id="hail" class="heading-element"><span>Hail</span> + <a href="#hail" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/aistra0528/Hail/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/aistra0528/Hail/releases</a></li> +<li>介绍: &ldquo;Disable / Hide / Suspend / Uninstall Android apps without root.&rdquo;</li> +</ul> +<h4 id="installerx" class="heading-element"><span>InstallerX</span> + <a href="#installerx" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/iamr0s/InstallerX/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/iamr0s/InstallerX/releases</a></li> +<li>介绍: &ldquo;A modern and functional Android app installer.&rdquo;</li> +</ul> +<h4 id="dhizuku_v28" class="heading-element"><span>Dhizuku_v2.8</span> + <a href="#dhizuku_v28" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="accounts_v15" class="heading-element"><span>Accounts_v1.5</span> + <a href="#accounts_v15" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="shizukurunner_17" class="heading-element"><span>ShizukuRunner_17</span> + <a href="#shizukurunner_17" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h2 id="shop" class="heading-element"><span>Shop</span> + <a href="#shop" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="coolapk" class="heading-element"><span>Coolapk</span> + <a href="#coolapk" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://www.coolapk.com/apk/com.coolapk.market"target="_blank" rel="external nofollow noopener noreferrer">https://www.coolapk.com/apk/com.coolapk.market</a></li> +</ul> +<h4 id="obtainium" class="heading-element"><span>Obtainium</span> + <a href="#obtainium" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/ImranR98/Obtainium/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/ImranR98/Obtainium/releases</a></li> +<li>介绍: &ldquo;Get Android app updates straight from the source. &quot;</li> +</ul> +<h4 id="apkpure_v31973_noad" class="heading-element"><span>APKPure_v3.19.73_NoAD</span> + <a href="#apkpure_v31973_noad" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="aurorastore" class="heading-element"><span>AuroraStore</span> + <a href="#aurorastore" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://gitlab.com/AuroraOSS/AuroraStore"target="_blank" rel="external nofollow noopener noreferrer">https://gitlab.com/AuroraOSS/AuroraStore</a></li> +<li>介绍: &ldquo;An unofficial FOSS client to Google Play.&rdquo;</li> +</ul> +<h4 id="neostore" class="heading-element"><span>NeoStore</span> + <a href="#neostore" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/NeoApplications/Neo-Store/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/NeoApplications/Neo-Store/releases</a></li> +<li>介绍: &ldquo;An F-Droid client with modern UI and an arsenal of extra features.&rdquo;</li> +</ul> +<h4 id="apkupdater" class="heading-element"><span>APKUpdater</span> + <a href="#apkupdater" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/rumboalla/apkupdater/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/rumboalla/apkupdater/releases</a></li> +<li>介绍: &ldquo;APKUpdater is an open source tool that simplifies the process of finding updates for your installed apps.&rdquo;</li> +</ul> +<h2 id="remote" class="heading-element"><span>Remote</span> + <a href="#remote" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="xbxplay_v140_cracked" class="heading-element"><span>XBXPlay_v1.4.0_Cracked</span> + <a href="#xbxplay_v140_cracked" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="xbox" class="heading-element"><span>Xbox</span> + <a href="#xbox" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://www.xbox.com/en-US/apps/xbox-app-for-mobile"target="_blank" rel="external nofollow noopener noreferrer">https://www.xbox.com/en-US/apps/xbox-app-for-mobile</a></li> +<li>介绍: &ldquo;Learn about the new Xbox app for mobile, which keeps you connected to the fun with your friends, games, and console from your phone or tablet while on the go.&rdquo;</li> +</ul> +<h4 id="remotedesktop" class="heading-element"><span>RemoteDesktop</span> + <a href="#remotedesktop" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://www.apkmirror.com/apk/microsoft-corporation/microsoft-remote-desktop-preview/"target="_blank" rel="external nofollow noopener noreferrer">https://www.apkmirror.com/apk/microsoft-corporation/microsoft-remote-desktop-preview/</a></li> +<li>介绍: &ldquo;Download Remote Desktop APKs for Android&rdquo;</li> +</ul> +<h4 id="qbitcontroller" class="heading-element"><span>qBitController</span> + <a href="#qbitcontroller" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://f-droid.org/zh_Hant/packages/dev.bartuzen.qbitcontroller/index.html"target="_blank" rel="external nofollow noopener noreferrer">https://f-droid.org/zh_Hant/packages/dev.bartuzen.qbitcontroller/index.html</a></li> +<li>介绍: &ldquo;一款能从 Android 设备中远程控制 qBittorrent 的软件。&rdquo;</li> +</ul> +<h4 id="moonlight" class="heading-element"><span>Moonlight</span> + <a href="#moonlight" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/moonlight-stream/moonlight-android/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/moonlight-stream/moonlight-android/releases</a></li> +<li>介绍: &ldquo;GameStream client for Android&rdquo;</li> +</ul> +<h4 id="acode" class="heading-element"><span>Acode</span> + <a href="#acode" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/deadlyjack/Acode/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/deadlyjack/Acode/releases</a></li> +<li>介绍: &ldquo;Acode - powerful text/code editor for android.&rdquo;</li> +</ul> +<h2 id="read" class="heading-element"><span>Read</span> + <a href="#read" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="readyou" class="heading-element"><span>ReadYou</span> + <a href="#readyou" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/Ashinch/ReadYou/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/Ashinch/ReadYou/releases</a></li> +<li>介绍: &ldquo;An Android RSS reader presented in Material You style&rdquo;</li> +</ul> +<h4 id="moonreader_90_crack" class="heading-element"><span>MoonReader_9.0_Crack</span> + <a href="#moonreader_90_crack" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="mangareader_073" class="heading-element"><span>MangaReader_0.7.3</span> + <a href="#mangareader_073" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h2 id="network" class="heading-element"><span>Network</span> + <a href="#network" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="zerotier-one" class="heading-element"><span>ZeroTier One</span> + <a href="#zerotier-one" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://download.zerotier.com/dist/"target="_blank" rel="external nofollow noopener noreferrer">https://download.zerotier.com/dist/</a></li> +</ul> +<h4 id="tailscale" class="heading-element"><span>Tailscale</span> + <a href="#tailscale" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://f-droid.org/zh_Hant/packages/com.tailscale.ipn/"target="_blank" rel="external nofollow noopener noreferrer">https://f-droid.org/zh_Hant/packages/com.tailscale.ipn/</a></li> +<li>介绍: &ldquo;Mesh VPN based on WireGuard&rdquo;</li> +</ul> +<h4 id="flclash" class="heading-element"><span>FlClash</span> + <a href="#flclash" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/chen08209/FlClash/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/chen08209/FlClash/releases</a></li> +<li>介绍: &ldquo;A multi-platform proxy client based on ClashMeta,simple and easy to use, open-source and ad-free.&rdquo;</li> +</ul> +<h2 id="fun" class="heading-element"><span>Fun</span> + <a href="#fun" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="yamby" class="heading-element"><span>Yamby</span> + <a href="#yamby" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://t.me/yamby_release"target="_blank" rel="external nofollow noopener noreferrer">https://t.me/yamby_release</a></li> +<li>介绍: &ldquo;Yet Another Emby Client!&rdquo;</li> +</ul> +<h4 id="pilix" class="heading-element"><span>PiliX</span> + <a href="#pilix" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/guozhigq/pilipala/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/guozhigq/pilipala/releases</a></li> +<li>介绍: &ldquo;PiliPala 是使用 Flutter 开发的 BiliBili 第三方客户端。&rdquo;</li> +</ul> +<h4 id="newpipe" class="heading-element"><span>NewPipe</span> + <a href="#newpipe" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/TeamNewPipe/NewPipe/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/TeamNewPipe/NewPipe/releases</a></li> +<li>介绍: &ldquo;A libre lightweight streaming front-end for Android.&rdquo;</li> +</ul> +<h4 id="nekogram" class="heading-element"><span>Nekogram</span> + <a href="#nekogram" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/Nekogram/Nekogram/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/Nekogram/Nekogram/releases</a></li> +<li>介绍: &ldquo;Open-source third-party Telegram client with few but useful mods.&rdquo;</li> +</ul> +<h4 id="fongmi" class="heading-element"><span>FongMi</span> + <a href="#fongmi" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://t.me/ys_tvb"target="_blank" rel="external nofollow noopener noreferrer">https://t.me/ys_tvb</a></li> +<li>介绍: &ldquo;看电视&rdquo;</li> </ul> \ No newline at end of file diff --git a/categories/index.html b/categories/index.html index 71eb6ab..aec8f9b 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1,4 +1,4 @@ 所有分类 - 洋葱的自留地 -
0%
\ No newline at end of file diff --git "a/categories/\346\265\213\350\257\225/index.html" "b/categories/\346\265\213\350\257\225/index.html" index ca83aec..3e34e36 100644 --- "a/categories/\346\265\213\350\257\225/index.html" +++ "b/categories/\346\265\213\350\257\225/index.html" @@ -1,5 +1,5 @@ 测试 - 分类 - 洋葱的自留地 -

测试 1

2019

0%
\ No newline at end of file diff --git "a/categories/\346\265\213\350\257\225/index.xml" "b/categories/\346\265\213\350\257\225/index.xml" index 007b269..4de5694 100644 --- "a/categories/\346\265\213\350\257\225/index.xml" +++ "b/categories/\346\265\213\350\257\225/index.xml" @@ -1,2 +1,326 @@ -测试 - 分类 - 洋葱的自留地http://xiaolong.fun/categories/%E6%B5%8B%E8%AF%95/洋葱的自留地Hugo 0.137.0 & FixIt v0.3.14zh-CNSat, 16 Mar 2019 00:00:00 +0000Pytest Fixture Notehttp://xiaolong.fun/posts/pytest-fixture-note/Sat, 16 Mar 2019 00:00:00 +0000http://xiaolong.fun/posts/pytest-fixture-note/笔记测试<p>最近在学习实践自动化相关的知识,最终选用 pytest 来组织测试用例。</p> -<p>本文是 pytest 学习笔记的第一篇。</p> \ No newline at end of file +测试 - 分类 - 洋葱的自留地http://xiaolong.fun/categories/%E6%B5%8B%E8%AF%95/洋葱的自留地7616145989362176075511352571992064Hugo 0.137.1 & FixIt v0.3.14zh-CNSat, 16 Mar 2019 00:00:00 +0000Pytest Fixture Notehttp://xiaolong.fun/posts/pytest-fixture-note/Sat, 16 Mar 2019 00:00:00 +0000http://xiaolong.fun/posts/pytest-fixture-note/笔记测试<img src="http://xiaolong.fun/images/posts/pytest-fixture-note/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><p>最近在学习实践自动化相关的知识,最终选用 pytest 来组织测试用例。</p> +<p>本文是 pytest 学习笔记的第一篇。</p> +<p>Fixture 是 pytest 中的一个基本概念,可以简单理解为在测试用例前需要执行的内容,我用来初始化环境、准备数据等工作。</p> +<h2 id="fixture" class="heading-element"><span>Fixture</span> + <a href="#fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p>在被当做 fixture 的函数前面加上<code> @pytest.fixture</code>来定义一个 Fixture</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">before</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">before each test&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="scope" class="heading-element"><span>Scope</span> + <a href="#scope" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li>function:每个 test 都运行,默认是 function 的 scope</li> +<li>class:每个 class 的所有 test 只运行一次</li> +<li>module:每个 module 的所有 test 只运行一次</li> +<li>session:每个 session 只运行一次</li> +</ul> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span><span class="lnt">11 +</span><span class="lnt">12 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&#34;module&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#yield下面是teardown内容</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_ehlo</span><span class="p">(</span><span class="n">smtp</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"><span class="c1">#fixture的function名称,可以直接作为参数,传给需要使用它的测试样例。 在使用时,smtp并非前面定义的function,而是function的返回值,即smtplib.SMTP</span> +</span></span><span class="line"><span class="cl"> <span class="n">response</span><span class="p">,</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">smtp</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">response</span> <span class="o">==</span> <span class="mi">250</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="sa">b</span><span class="s2">&#34;smtp.gmail.com&#34;</span> <span class="ow">in</span> <span class="n">msg</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="conftestpy" class="heading-element"><span>conftest.py</span> + <a href="#conftestpy" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>conftest.py</code>是 pytest 的默认配置文件,可以在其中放公用的 fixture 或 plugin。</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span><span class="lnt">6 +</span><span class="lnt">7 +</span><span class="lnt">8 +</span><span class="lnt">9 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tests +</span></span><span class="line"><span class="cl">├── conftest.py +</span></span><span class="line"><span class="cl">├── test_a.py +</span></span><span class="line"><span class="cl">├── test_b.py +</span></span><span class="line"><span class="cl">└── sub +</span></span><span class="line"><span class="cl"> ├── __init__.py +</span></span><span class="line"><span class="cl"> ├── conftest.py +</span></span><span class="line"><span class="cl"> ├── test_c.py +</span></span><span class="line"><span class="cl"> └── test_d.py</span></span></code></pre></td></tr></table> +</div> +</div><p><code>conftest.py</code>遵守就近原则,会优先使用层级最近的 conftest 中定义的 Fixture。同时外层的测试用例 a,b 不能使用内层<code>conftest.py</code>中定义的 fixture</p> +<h2 id="use-fixture" class="heading-element"><span>Use Fixture</span> + <a href="#use-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h3 id="1-当做参数直接调用" class="heading-element"><span>1. 当做参数直接调用</span> + <a href="#1-%e5%bd%93%e5%81%9a%e5%8f%82%e6%95%b0%e7%9b%b4%e6%8e%a5%e8%b0%83%e7%94%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&#34;module&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_ehlo</span><span class="p">(</span><span class="n">smtp</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">response</span><span class="p">,</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">smtp</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">response</span> <span class="o">==</span> <span class="mi">250</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="sa">b</span><span class="s2">&#34;smtp.gmail.com&#34;</span> <span class="ow">in</span> <span class="n">msg</span></span></span></code></pre></td></tr></table> +</div> +</div><p>fixture 的 function 名称,可以直接作为参数,传给需要使用它的测试样例。 在使用时,<code>smtp</code>并非前面定义的 function,而是 function 的返回值,即<code>smtplib.SMTP</code></p> +<h3 id="2-在函数前用-fixture-decorator-调用" class="heading-element"><span>2. 在函数前用 Fixture Decorator 调用</span> + <a href="#2-%e5%9c%a8%e5%87%bd%e6%95%b0%e5%89%8d%e7%94%a8-fixture-decorator-%e8%b0%83%e7%94%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span><span class="lnt">11 +</span><span class="lnt">12 +</span><span class="lnt">13 +</span><span class="lnt">14 +</span><span class="lnt">15 +</span><span class="lnt">16 +</span><span class="lnt">17 +</span><span class="lnt">18 +</span><span class="lnt">19 +</span><span class="lnt">20 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_1</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Test1</span><span class="p">:</span> +</span></span><span class="line"><span class="cl"> <span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_3</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"> <span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_4</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_2()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Test2</span><span class="p">:</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_5</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_6</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_2()&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="3-用-autouse-调用-fixture" class="heading-element"><span>3. 用 Autouse 调用 Fixture</span> + <a href="#3-%e7%94%a8-autouse-%e8%b0%83%e7%94%a8-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p>fixture decorator 一个 optional 的参数是<code>autouse</code>, 默认设置为 False。 +当默认为 False,就可以选择用上面两种方式来试用 fixture。 +当设置为 True 时,在一个 session 内的所有的 test 都会自动调用这个 fixture。</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">before</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">before each test&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="finallizer" class="heading-element"><span>Finallizer</span> + <a href="#finallizer" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">fin</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#释放函数</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span> <span class="p">(</span><span class="s2">&#34;teardown smtp&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="n">request</span><span class="o">.</span><span class="n">addfinalizer</span><span class="p">(</span><span class="n">fin</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#测试完成后调用</span> +</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">smtp</span></span></span></code></pre></td></tr></table> +</div> +</div><p>通过<code>addfinallizer()</code>注册释放函数</p> +<h2 id="parametrizing" class="heading-element"><span>Parametrizing</span> + <a href="#parametrizing" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p>fixture 可以通过参数化来循环使用预设的参数</p> +<h3 id="1-params" class="heading-element"><span>1. params</span> + <a href="#1-params" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span><span class="lnt">6 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">params</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="s2">&#34;mail.python.org&#34;</span><span class="p">])</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">param</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span> <span class="p">(</span><span class="s2">&#34;finalizing </span><span class="si">%s</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="n">smtp</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></span></span></code></pre></td></tr></table> +</div> +</div><p>在<code> @pytest.fixture</code>中,指定参数<code>params</code>,就可以利用特殊对象(<code>request</code>)来引用<code>request.param</code>。 使用以上带参数的 smtp 的测试样例,都会被执行两次。</p> +<h3 id="2-pytestmarkparametrize" class="heading-element"><span>2. @pytest.mark.parametrize</span> + <a href="#2-pytestmarkparametrize" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="nd">@pytest.mark.parametrize</span><span class="p">(</span><span class="s2">&#34;test_input, expected&#34;</span><span class="p">,</span> <span class="p">[</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="mi">2</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="mi">4</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="mi">1</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"><span class="p">])</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_add</span><span class="p">(</span><span class="n">test_input</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">expected</span> <span class="o">==</span> <span class="n">add</span><span class="p">(</span><span class="n">test_input</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">test_input</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="build-in-fixture" class="heading-element"><span>Build-in Fixture</span> + <a href="#build-in-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p><code>pytest --fixtures</code>可以列出所有可用的 fixture,包括内置的、插件中的、以及当前项目定义的。</p> +<h3 id="capsys" class="heading-element"><span>capsys</span> + <a href="#capsys" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>capsys</code>可以捕捉测试 function 的标准输出</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_print</span><span class="p">(</span><span class="n">capsys</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;hello&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">out</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">capsys</span><span class="o">.</span><span class="n">readouterr</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="s1">&#39;hello&#39;</span> <span class="o">==</span> <span class="n">out</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="tmpdir" class="heading-element"><span>tmpdir</span> + <a href="#tmpdir" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>tmpdir</code>则可以自动创建临时文件夹</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_path</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="kn">from</span> <span class="nn">py._path.local</span> <span class="kn">import</span> <span class="n">LocalPath</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">,</span> <span class="n">LocalPath</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="kn">from</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="n">isdir</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">isdir</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">))</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="参考" class="heading-element"><span>参考</span> + <a href="#%e5%8f%82%e8%80%83" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><ul> +<li><a href="http://note.qidong.name/2018/01/pytest-fixture/"target="_blank" rel="external nofollow noopener noreferrer">《Pytest 中的 Fixture》</a></li> +<li><a href="http://senarukana.github.io/2015/05/29/pytest-fixture/"target="_blank" rel="external nofollow noopener noreferrer">《Pytest Fixture》</a></li> +<li><a href="https://docs.pytest.org/en/latest/fixture.html#fixture-finalization-executing-teardown-code"target="_blank" rel="external nofollow noopener noreferrer">《pytest fixtures: explicit, modular, scalable》</a></li> +</ul> \ No newline at end of file diff --git "a/categories/\347\224\237\346\264\273/index.html" "b/categories/\347\224\237\346\264\273/index.html" index 76dc71e..4833a85 100644 --- "a/categories/\347\224\237\346\264\273/index.html" +++ "b/categories/\347\224\237\346\264\273/index.html" @@ -1,5 +1,5 @@ 生活 - 分类 - 洋葱的自留地 -

生活 1

2021

0%
\ No newline at end of file diff --git "a/categories/\347\224\237\346\264\273/index.xml" "b/categories/\347\224\237\346\264\273/index.xml" index 2791efb..9f66896 100644 --- "a/categories/\347\224\237\346\264\273/index.xml" +++ "b/categories/\347\224\237\346\264\273/index.xml" @@ -1,3 +1,272 @@ -生活 - 分类 - 洋葱的自留地http://xiaolong.fun/categories/%E7%94%9F%E6%B4%BB/洋葱的自留地Hugo 0.137.0 & FixIt v0.3.14zh-CNTue, 23 Mar 2021 00:00:00 +0000驾考宝典http://xiaolong.fun/posts/driver-note/Tue, 23 Mar 2021 00:00:00 +0000http://xiaolong.fun/posts/driver-note/笔记生活<p>在考驾照这件事情上,我真的是拖延症晚期发作。</p> +生活 - 分类 - 洋葱的自留地http://xiaolong.fun/categories/%E7%94%9F%E6%B4%BB/洋葱的自留地7616145989362176075511352571992064Hugo 0.137.1 & FixIt v0.3.14zh-CNTue, 23 Mar 2021 00:00:00 +0000驾考宝典http://xiaolong.fun/posts/driver-note/Tue, 23 Mar 2021 00:00:00 +0000http://xiaolong.fun/posts/driver-note/笔记生活<img src="http://xiaolong.fun/images/posts/driver-note/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><p>在考驾照这件事情上,我真的是拖延症晚期发作。</p> <p>从报名到开始考,前前后后过了 4 年时间。</p> -<p>为了中间能回忆起之前练得内容,就把每个考试想进行了记录。</p> \ No newline at end of file +<p>为了中间能回忆起之前练得内容,就把每个考试想进行了记录。</p> +<p>这篇文章也是因为有朋友询问,索性发到博客里,也算解救写博客的懒癌晚期,一举多得。</p> +<h2 id="科目一" class="heading-element"><span>科目一</span> + <a href="#%e7%a7%91%e7%9b%ae%e4%b8%80" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><ul> +<li> +<p>假一吊二撤三醉五逃终身</p> +</li> +<li> +<p>站 30 口 50 禁止停车</p> +</li> +<li> +<p>高速最低 60 最高 120 两车道,左 100-120,右 60-100 三车道,左 110-120,中 90-110,右 60-80</p> +</li> +<li> +<p>未逃逸:3 年以下;逃逸或情节特别恶劣:3-7 年;因逃逸致人死亡:7 年以上。</p> +</li> +<li> +<p>只要机动车上路行驶,就必须悬挂号牌,放置检验合格标志、保险标志,随车携带行驶证及驾驶证。缺少任何一项,交警都可依法扣留车辆。</p> +</li> +<li> +<p>有 90 日选 90 日,没 90 日选 30 日</p> +</li> +<li> +<p>题干中有驾驶证,选项中找驾驶证,选项中没有驾驶证找车</p> +</li> +<li> +<p>车牌,驾照,酒驾,逃逸,超速 12 分</p> +</li> +<li> +<p>应急车道,信号灯 6 分</p> +</li> +</ul> +<h2 id="科目二" class="heading-element"><span>科目二</span> + <a href="#%e7%a7%91%e7%9b%ae%e4%ba%8c" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h3 id="倒车入库" class="heading-element"><span>倒车入库</span> + <a href="#%e5%80%92%e8%bd%a6%e5%85%a5%e5%ba%93" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li> +<p>离合踩到底,挂挡,放手刹,压离合</p> +</li> +<li> +<p>前车盖压黄线,向右打满,车头调正后回方向盘</p> +</li> +<li> +<p>挂倒挡,压离合</p> +</li> +<li> +<p>左后视镜下沿和黄线 1 指时,向右打满</p> +</li> +<li> +<p>车身距左右平均后,方向盘回正</p> +</li> +<li> +<p>调整方向,入库</p> +</li> +</ol> +<h3 id="熄火启动" class="heading-element"><span>熄火,启动</span> + <a href="#%e7%86%84%e7%81%ab%e5%90%af%e5%8a%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li>先离合踩到底,挂空挡,启动</li> +</ol> +<h3 id="侧边停车" class="heading-element"><span>侧边停车</span> + <a href="#%e4%be%a7%e8%be%b9%e5%81%9c%e8%bd%a6" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<h4 id="进" class="heading-element"><span>进</span> + <a href="#%e8%bf%9b" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ol> +<li> +<p>右后视镜红色角消失时向右打死</p> +</li> +<li> +<p>左后视镜出现红色标志回正</p> +</li> +<li> +<p>左后视镜后轮压线,向左打死,平行后停车</p> +</li> +</ol> +</li> +<li> +<h4 id="出" class="heading-element"><span>出</span> + <a href="#%e5%87%ba" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ol> +<li> +<p>方向盘左打死不动,1 档,车前盖左边线压黄线回正</p> +</li> +<li> +<p>车盖中心(雨刮左侧)压黄线向右打一圈,头正后回正</p> +</li> +</ol> +</li> +</ul> +<h3 id="起步" class="heading-element"><span>起步</span> + <a href="#%e8%b5%b7%e6%ad%a5" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li> +<p>起步打左转向灯,</p> +</li> +<li> +<p>车子移动,打右转向灯,12 点钟正对停字</p> +</li> +<li> +<p>松离合,上坡,视线和两个杆子一条线,离合踩死,刹车踩死,拉手刹</p> +</li> +<li> +<p>打左转向灯,松手刹,松离合,车子抖动慢慢松刹车</p> +</li> +<li> +<p>过了坡开始下坡的时候离合踩到底,用刹车控制速度,左大灯往左边黄线靠</p> +</li> +<li> +<p>打右转向灯,右侧门把手和黄线平时右转打死</p> +</li> +</ol> +<h3 id="s-弯" class="heading-element"><span>S 弯</span> + <a href="#s-%e5%bc%af" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li> +<p>车头要压住黄线向右打一圈</p> +</li> +<li> +<p>左灯要压到左边最突出部分时回正</p> +</li> +<li> +<p>左灯要压住右侧线时向向左打一圈,修正方向使右线沿着左灯方向</p> +</li> +<li> +<p>左灯压倒左线时回正</p> +</li> +<li> +<p>右侧后视镜下面压到右线,向右打满,然后回 1/4</p> +</li> +<li> +<p>出弯回正,头探出窗户看左轮,修正方向到贴着线,停在收费旁,打空挡,拉手刹</p> +</li> +</ol> +<h2 id="科目三" class="heading-element"><span>科目三</span> + <a href="#%e7%a7%91%e7%9b%ae%e4%b8%89" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h3 id="场内" class="heading-element"><span>场内</span> + <a href="#%e5%9c%ba%e5%86%85" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>上车动一下远关灯</p> +</li> +<li> +<p>转向灯,鸣笛,离合,一档,手刹</p> +</li> +<li> +<p>上路后关转向灯</p> +</li> +<li> +<p>直线行驶,调整好方向再进,别动</p> +</li> +<li> +<p>超车,转向灯 3 秒,看后视镜再转</p> +</li> +<li> +<p>隧道,给小油,速度别太难了</p> +</li> +<li> +<p>出隧道后,加 4 档,上 40 码,然后减到 30 码,降到 3 档</p> +</li> +<li> +<p>直角转弯后,给小油稳定在 3 档</p> +</li> +<li> +<p>听指示 3 降 2,加油,2 升 3</p> +</li> +<li> +<p>学校区域,送来油门,左右摇头</p> +</li> +<li> +<p>右转向灯,在柱子前停下,左右摇头</p> +</li> +<li> +<p>树和肩膀平齐向右打死,千万别压线</p> +</li> +<li> +<p>出门前停在线前面,听指示</p> +</li> +</ul> +<h3 id="左" class="heading-element"><span>左</span> + <a href="#%e5%b7%a6" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>观察左右车流,走外圈</p> +</li> +<li> +<p>右转向灯,路口停下,换一档</p> +</li> +<li> +<p>人行道松开油门,左右观察</p> +</li> +<li> +<p>调头打转向灯,到调头的地方,稍微向右调一下方向,在横线前停下,看后视镜,起步时向左打死方向</p> +</li> +</ul> +<h3 id="右" class="heading-element"><span>右</span> + <a href="#%e5%8f%b3" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>观察左右车流,走内圈</p> +</li> +<li> +<p>左转向灯,路口停下,换一档</p> +</li> +<li> +<p>调头打转向灯,到调头的地方,在横线前停下,看后视镜,车头压线向左打死</p> +</li> +</ul> +<h3 id="回场内" class="heading-element"><span>回场内</span> + <a href="#%e5%9b%9e%e5%9c%ba%e5%86%85" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>提前松开离合器,加油上坡,换 2 档</p> +</li> +<li> +<p>公交车区域提前观察</p> +</li> +<li> +<p>靠边停车,别压线,人和地上白点对齐就停</p> +</li> +</ul> +<h3 id="其他" class="heading-element"><span>其他</span> + <a href="#%e5%85%b6%e4%bb%96" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>尽量 3 档</p> +</li> +<li> +<p>能停就停</p> +</li> +<li> +<p>别忘了转向灯</p> +</li> +<li> +<p>别停在斑马线</p> +</li> +</ul> \ No newline at end of file diff --git "a/categories/\347\254\224\350\256\260/index.html" "b/categories/\347\254\224\350\256\260/index.html" index 278dabc..5f7af2b 100644 --- "a/categories/\347\254\224\350\256\260/index.html" +++ "b/categories/\347\254\224\350\256\260/index.html" @@ -1,7 +1,7 @@ 笔记 - 分类 - 洋葱的自留地 -
0%
\ No newline at end of file +洋葱
0%
\ No newline at end of file diff --git "a/categories/\347\254\224\350\256\260/index.xml" "b/categories/\347\254\224\350\256\260/index.xml" index 7b8ea40..e08e9c1 100644 --- "a/categories/\347\254\224\350\256\260/index.xml" +++ "b/categories/\347\254\224\350\256\260/index.xml" @@ -1,4 +1,4 @@ -笔记 - 分类 - 洋葱的自留地http://xiaolong.fun/categories/%E7%AC%94%E8%AE%B0/洋葱的自留地Hugo 0.137.0 & FixIt v0.3.14zh-CNTue, 05 Nov 2024 00:00:00 +0000Android App 集合http://xiaolong.fun/posts/awesome-android-app/Tue, 05 Nov 2024 00:00:00 +0000http://xiaolong.fun/posts/awesome-android-app/笔记Android<h2 id="system" class="heading-element"><span>System</span> +笔记 - 分类 - 洋葱的自留地http://xiaolong.fun/categories/%E7%AC%94%E8%AE%B0/洋葱的自留地7616145989362176075511352571992064Hugo 0.137.1 & FixIt v0.3.14zh-CNTue, 05 Nov 2024 00:00:00 +0000Android App 集合http://xiaolong.fun/posts/awesome-android-app/Tue, 05 Nov 2024 00:00:00 +0000http://xiaolong.fun/posts/awesome-android-app/笔记Android<img src="http://xiaolong.fun/images/posts/awesome-android-app/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><h2 id="system" class="heading-element"><span>System</span> <a href="#system" class="heading-mark"> <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> </a> @@ -9,7 +9,846 @@ </h4><ul> <li>下载地址: <a href="https://github.com/termux/termux-app/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/termux/termux-app/releases</a></li> <li>介绍: &ldquo;a terminal emulator application for Android OS extendible by variety of packages.&rdquo;</li> -</ul>驾考宝典http://xiaolong.fun/posts/driver-note/Tue, 23 Mar 2021 00:00:00 +0000http://xiaolong.fun/posts/driver-note/笔记生活<p>在考驾照这件事情上,我真的是拖延症晚期发作。</p> +</ul> +<h4 id="doodle" class="heading-element"><span>Doodle</span> + <a href="#doodle" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://f-droid.org/packages/xyz.zedler.patrick.doodle/"target="_blank" rel="external nofollow noopener noreferrer">https://f-droid.org/packages/xyz.zedler.patrick.doodle/</a></li> +<li>介绍: &ldquo;Colorful live wallpapers with auto dark mode and power-efficient animations&rdquo;</li> +</ul> +<h4 id="materialfiles" class="heading-element"><span>MaterialFiles</span> + <a href="#materialfiles" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/zhanghai/MaterialFiles/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/zhanghai/MaterialFiles/releases</a></li> +<li>介绍: &ldquo;Material Design file manager for Android.&rdquo;</li> +</ul> +<h4 id="appops" class="heading-element"><span>AppOps</span> + <a href="#appops" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://appops.rikka.app/download/"target="_blank" rel="external nofollow noopener noreferrer">https://appops.rikka.app/download/</a></li> +<li>介绍: &ldquo;Control the hidden appops conveniently&rdquo;</li> +</ul> +<h4 id="shizuku" class="heading-element"><span>Shizuku</span> + <a href="#shizuku" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://shizuku.rikka.app/zh-hans/"target="_blank" rel="external nofollow noopener noreferrer">https://shizuku.rikka.app/zh-hans/</a></li> +<li>介绍: &ldquo;让你的应用直接使用系统 API&rdquo;</li> +</ul> +<h4 id="hail" class="heading-element"><span>Hail</span> + <a href="#hail" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/aistra0528/Hail/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/aistra0528/Hail/releases</a></li> +<li>介绍: &ldquo;Disable / Hide / Suspend / Uninstall Android apps without root.&rdquo;</li> +</ul> +<h4 id="installerx" class="heading-element"><span>InstallerX</span> + <a href="#installerx" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/iamr0s/InstallerX/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/iamr0s/InstallerX/releases</a></li> +<li>介绍: &ldquo;A modern and functional Android app installer.&rdquo;</li> +</ul> +<h4 id="dhizuku_v28" class="heading-element"><span>Dhizuku_v2.8</span> + <a href="#dhizuku_v28" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="accounts_v15" class="heading-element"><span>Accounts_v1.5</span> + <a href="#accounts_v15" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="shizukurunner_17" class="heading-element"><span>ShizukuRunner_17</span> + <a href="#shizukurunner_17" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h2 id="shop" class="heading-element"><span>Shop</span> + <a href="#shop" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="coolapk" class="heading-element"><span>Coolapk</span> + <a href="#coolapk" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://www.coolapk.com/apk/com.coolapk.market"target="_blank" rel="external nofollow noopener noreferrer">https://www.coolapk.com/apk/com.coolapk.market</a></li> +</ul> +<h4 id="obtainium" class="heading-element"><span>Obtainium</span> + <a href="#obtainium" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/ImranR98/Obtainium/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/ImranR98/Obtainium/releases</a></li> +<li>介绍: &ldquo;Get Android app updates straight from the source. &quot;</li> +</ul> +<h4 id="apkpure_v31973_noad" class="heading-element"><span>APKPure_v3.19.73_NoAD</span> + <a href="#apkpure_v31973_noad" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="aurorastore" class="heading-element"><span>AuroraStore</span> + <a href="#aurorastore" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://gitlab.com/AuroraOSS/AuroraStore"target="_blank" rel="external nofollow noopener noreferrer">https://gitlab.com/AuroraOSS/AuroraStore</a></li> +<li>介绍: &ldquo;An unofficial FOSS client to Google Play.&rdquo;</li> +</ul> +<h4 id="neostore" class="heading-element"><span>NeoStore</span> + <a href="#neostore" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/NeoApplications/Neo-Store/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/NeoApplications/Neo-Store/releases</a></li> +<li>介绍: &ldquo;An F-Droid client with modern UI and an arsenal of extra features.&rdquo;</li> +</ul> +<h4 id="apkupdater" class="heading-element"><span>APKUpdater</span> + <a href="#apkupdater" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/rumboalla/apkupdater/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/rumboalla/apkupdater/releases</a></li> +<li>介绍: &ldquo;APKUpdater is an open source tool that simplifies the process of finding updates for your installed apps.&rdquo;</li> +</ul> +<h2 id="remote" class="heading-element"><span>Remote</span> + <a href="#remote" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="xbxplay_v140_cracked" class="heading-element"><span>XBXPlay_v1.4.0_Cracked</span> + <a href="#xbxplay_v140_cracked" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="xbox" class="heading-element"><span>Xbox</span> + <a href="#xbox" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://www.xbox.com/en-US/apps/xbox-app-for-mobile"target="_blank" rel="external nofollow noopener noreferrer">https://www.xbox.com/en-US/apps/xbox-app-for-mobile</a></li> +<li>介绍: &ldquo;Learn about the new Xbox app for mobile, which keeps you connected to the fun with your friends, games, and console from your phone or tablet while on the go.&rdquo;</li> +</ul> +<h4 id="remotedesktop" class="heading-element"><span>RemoteDesktop</span> + <a href="#remotedesktop" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://www.apkmirror.com/apk/microsoft-corporation/microsoft-remote-desktop-preview/"target="_blank" rel="external nofollow noopener noreferrer">https://www.apkmirror.com/apk/microsoft-corporation/microsoft-remote-desktop-preview/</a></li> +<li>介绍: &ldquo;Download Remote Desktop APKs for Android&rdquo;</li> +</ul> +<h4 id="qbitcontroller" class="heading-element"><span>qBitController</span> + <a href="#qbitcontroller" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://f-droid.org/zh_Hant/packages/dev.bartuzen.qbitcontroller/index.html"target="_blank" rel="external nofollow noopener noreferrer">https://f-droid.org/zh_Hant/packages/dev.bartuzen.qbitcontroller/index.html</a></li> +<li>介绍: &ldquo;一款能从 Android 设备中远程控制 qBittorrent 的软件。&rdquo;</li> +</ul> +<h4 id="moonlight" class="heading-element"><span>Moonlight</span> + <a href="#moonlight" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/moonlight-stream/moonlight-android/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/moonlight-stream/moonlight-android/releases</a></li> +<li>介绍: &ldquo;GameStream client for Android&rdquo;</li> +</ul> +<h4 id="acode" class="heading-element"><span>Acode</span> + <a href="#acode" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/deadlyjack/Acode/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/deadlyjack/Acode/releases</a></li> +<li>介绍: &ldquo;Acode - powerful text/code editor for android.&rdquo;</li> +</ul> +<h2 id="read" class="heading-element"><span>Read</span> + <a href="#read" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="readyou" class="heading-element"><span>ReadYou</span> + <a href="#readyou" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/Ashinch/ReadYou/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/Ashinch/ReadYou/releases</a></li> +<li>介绍: &ldquo;An Android RSS reader presented in Material You style&rdquo;</li> +</ul> +<h4 id="moonreader_90_crack" class="heading-element"><span>MoonReader_9.0_Crack</span> + <a href="#moonreader_90_crack" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="mangareader_073" class="heading-element"><span>MangaReader_0.7.3</span> + <a href="#mangareader_073" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h2 id="network" class="heading-element"><span>Network</span> + <a href="#network" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="zerotier-one" class="heading-element"><span>ZeroTier One</span> + <a href="#zerotier-one" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://download.zerotier.com/dist/"target="_blank" rel="external nofollow noopener noreferrer">https://download.zerotier.com/dist/</a></li> +</ul> +<h4 id="tailscale" class="heading-element"><span>Tailscale</span> + <a href="#tailscale" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://f-droid.org/zh_Hant/packages/com.tailscale.ipn/"target="_blank" rel="external nofollow noopener noreferrer">https://f-droid.org/zh_Hant/packages/com.tailscale.ipn/</a></li> +<li>介绍: &ldquo;Mesh VPN based on WireGuard&rdquo;</li> +</ul> +<h4 id="flclash" class="heading-element"><span>FlClash</span> + <a href="#flclash" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/chen08209/FlClash/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/chen08209/FlClash/releases</a></li> +<li>介绍: &ldquo;A multi-platform proxy client based on ClashMeta,simple and easy to use, open-source and ad-free.&rdquo;</li> +</ul> +<h2 id="fun" class="heading-element"><span>Fun</span> + <a href="#fun" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="yamby" class="heading-element"><span>Yamby</span> + <a href="#yamby" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://t.me/yamby_release"target="_blank" rel="external nofollow noopener noreferrer">https://t.me/yamby_release</a></li> +<li>介绍: &ldquo;Yet Another Emby Client!&rdquo;</li> +</ul> +<h4 id="pilix" class="heading-element"><span>PiliX</span> + <a href="#pilix" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/guozhigq/pilipala/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/guozhigq/pilipala/releases</a></li> +<li>介绍: &ldquo;PiliPala 是使用 Flutter 开发的 BiliBili 第三方客户端。&rdquo;</li> +</ul> +<h4 id="newpipe" class="heading-element"><span>NewPipe</span> + <a href="#newpipe" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/TeamNewPipe/NewPipe/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/TeamNewPipe/NewPipe/releases</a></li> +<li>介绍: &ldquo;A libre lightweight streaming front-end for Android.&rdquo;</li> +</ul> +<h4 id="nekogram" class="heading-element"><span>Nekogram</span> + <a href="#nekogram" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/Nekogram/Nekogram/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/Nekogram/Nekogram/releases</a></li> +<li>介绍: &ldquo;Open-source third-party Telegram client with few but useful mods.&rdquo;</li> +</ul> +<h4 id="fongmi" class="heading-element"><span>FongMi</span> + <a href="#fongmi" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://t.me/ys_tvb"target="_blank" rel="external nofollow noopener noreferrer">https://t.me/ys_tvb</a></li> +<li>介绍: &ldquo;看电视&rdquo;</li> +</ul>驾考宝典http://xiaolong.fun/posts/driver-note/Tue, 23 Mar 2021 00:00:00 +0000http://xiaolong.fun/posts/driver-note/笔记生活<img src="http://xiaolong.fun/images/posts/driver-note/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><p>在考驾照这件事情上,我真的是拖延症晚期发作。</p> <p>从报名到开始考,前前后后过了 4 年时间。</p> -<p>为了中间能回忆起之前练得内容,就把每个考试想进行了记录。</p>Pytest Fixture Notehttp://xiaolong.fun/posts/pytest-fixture-note/Sat, 16 Mar 2019 00:00:00 +0000http://xiaolong.fun/posts/pytest-fixture-note/笔记测试<p>最近在学习实践自动化相关的知识,最终选用 pytest 来组织测试用例。</p> -<p>本文是 pytest 学习笔记的第一篇。</p> \ No newline at end of file +<p>为了中间能回忆起之前练得内容,就把每个考试想进行了记录。</p> +<p>这篇文章也是因为有朋友询问,索性发到博客里,也算解救写博客的懒癌晚期,一举多得。</p> +<h2 id="科目一" class="heading-element"><span>科目一</span> + <a href="#%e7%a7%91%e7%9b%ae%e4%b8%80" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><ul> +<li> +<p>假一吊二撤三醉五逃终身</p> +</li> +<li> +<p>站 30 口 50 禁止停车</p> +</li> +<li> +<p>高速最低 60 最高 120 两车道,左 100-120,右 60-100 三车道,左 110-120,中 90-110,右 60-80</p> +</li> +<li> +<p>未逃逸:3 年以下;逃逸或情节特别恶劣:3-7 年;因逃逸致人死亡:7 年以上。</p> +</li> +<li> +<p>只要机动车上路行驶,就必须悬挂号牌,放置检验合格标志、保险标志,随车携带行驶证及驾驶证。缺少任何一项,交警都可依法扣留车辆。</p> +</li> +<li> +<p>有 90 日选 90 日,没 90 日选 30 日</p> +</li> +<li> +<p>题干中有驾驶证,选项中找驾驶证,选项中没有驾驶证找车</p> +</li> +<li> +<p>车牌,驾照,酒驾,逃逸,超速 12 分</p> +</li> +<li> +<p>应急车道,信号灯 6 分</p> +</li> +</ul> +<h2 id="科目二" class="heading-element"><span>科目二</span> + <a href="#%e7%a7%91%e7%9b%ae%e4%ba%8c" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h3 id="倒车入库" class="heading-element"><span>倒车入库</span> + <a href="#%e5%80%92%e8%bd%a6%e5%85%a5%e5%ba%93" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li> +<p>离合踩到底,挂挡,放手刹,压离合</p> +</li> +<li> +<p>前车盖压黄线,向右打满,车头调正后回方向盘</p> +</li> +<li> +<p>挂倒挡,压离合</p> +</li> +<li> +<p>左后视镜下沿和黄线 1 指时,向右打满</p> +</li> +<li> +<p>车身距左右平均后,方向盘回正</p> +</li> +<li> +<p>调整方向,入库</p> +</li> +</ol> +<h3 id="熄火启动" class="heading-element"><span>熄火,启动</span> + <a href="#%e7%86%84%e7%81%ab%e5%90%af%e5%8a%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li>先离合踩到底,挂空挡,启动</li> +</ol> +<h3 id="侧边停车" class="heading-element"><span>侧边停车</span> + <a href="#%e4%be%a7%e8%be%b9%e5%81%9c%e8%bd%a6" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<h4 id="进" class="heading-element"><span>进</span> + <a href="#%e8%bf%9b" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ol> +<li> +<p>右后视镜红色角消失时向右打死</p> +</li> +<li> +<p>左后视镜出现红色标志回正</p> +</li> +<li> +<p>左后视镜后轮压线,向左打死,平行后停车</p> +</li> +</ol> +</li> +<li> +<h4 id="出" class="heading-element"><span>出</span> + <a href="#%e5%87%ba" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ol> +<li> +<p>方向盘左打死不动,1 档,车前盖左边线压黄线回正</p> +</li> +<li> +<p>车盖中心(雨刮左侧)压黄线向右打一圈,头正后回正</p> +</li> +</ol> +</li> +</ul> +<h3 id="起步" class="heading-element"><span>起步</span> + <a href="#%e8%b5%b7%e6%ad%a5" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li> +<p>起步打左转向灯,</p> +</li> +<li> +<p>车子移动,打右转向灯,12 点钟正对停字</p> +</li> +<li> +<p>松离合,上坡,视线和两个杆子一条线,离合踩死,刹车踩死,拉手刹</p> +</li> +<li> +<p>打左转向灯,松手刹,松离合,车子抖动慢慢松刹车</p> +</li> +<li> +<p>过了坡开始下坡的时候离合踩到底,用刹车控制速度,左大灯往左边黄线靠</p> +</li> +<li> +<p>打右转向灯,右侧门把手和黄线平时右转打死</p> +</li> +</ol> +<h3 id="s-弯" class="heading-element"><span>S 弯</span> + <a href="#s-%e5%bc%af" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li> +<p>车头要压住黄线向右打一圈</p> +</li> +<li> +<p>左灯要压到左边最突出部分时回正</p> +</li> +<li> +<p>左灯要压住右侧线时向向左打一圈,修正方向使右线沿着左灯方向</p> +</li> +<li> +<p>左灯压倒左线时回正</p> +</li> +<li> +<p>右侧后视镜下面压到右线,向右打满,然后回 1/4</p> +</li> +<li> +<p>出弯回正,头探出窗户看左轮,修正方向到贴着线,停在收费旁,打空挡,拉手刹</p> +</li> +</ol> +<h2 id="科目三" class="heading-element"><span>科目三</span> + <a href="#%e7%a7%91%e7%9b%ae%e4%b8%89" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h3 id="场内" class="heading-element"><span>场内</span> + <a href="#%e5%9c%ba%e5%86%85" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>上车动一下远关灯</p> +</li> +<li> +<p>转向灯,鸣笛,离合,一档,手刹</p> +</li> +<li> +<p>上路后关转向灯</p> +</li> +<li> +<p>直线行驶,调整好方向再进,别动</p> +</li> +<li> +<p>超车,转向灯 3 秒,看后视镜再转</p> +</li> +<li> +<p>隧道,给小油,速度别太难了</p> +</li> +<li> +<p>出隧道后,加 4 档,上 40 码,然后减到 30 码,降到 3 档</p> +</li> +<li> +<p>直角转弯后,给小油稳定在 3 档</p> +</li> +<li> +<p>听指示 3 降 2,加油,2 升 3</p> +</li> +<li> +<p>学校区域,送来油门,左右摇头</p> +</li> +<li> +<p>右转向灯,在柱子前停下,左右摇头</p> +</li> +<li> +<p>树和肩膀平齐向右打死,千万别压线</p> +</li> +<li> +<p>出门前停在线前面,听指示</p> +</li> +</ul> +<h3 id="左" class="heading-element"><span>左</span> + <a href="#%e5%b7%a6" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>观察左右车流,走外圈</p> +</li> +<li> +<p>右转向灯,路口停下,换一档</p> +</li> +<li> +<p>人行道松开油门,左右观察</p> +</li> +<li> +<p>调头打转向灯,到调头的地方,稍微向右调一下方向,在横线前停下,看后视镜,起步时向左打死方向</p> +</li> +</ul> +<h3 id="右" class="heading-element"><span>右</span> + <a href="#%e5%8f%b3" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>观察左右车流,走内圈</p> +</li> +<li> +<p>左转向灯,路口停下,换一档</p> +</li> +<li> +<p>调头打转向灯,到调头的地方,在横线前停下,看后视镜,车头压线向左打死</p> +</li> +</ul> +<h3 id="回场内" class="heading-element"><span>回场内</span> + <a href="#%e5%9b%9e%e5%9c%ba%e5%86%85" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>提前松开离合器,加油上坡,换 2 档</p> +</li> +<li> +<p>公交车区域提前观察</p> +</li> +<li> +<p>靠边停车,别压线,人和地上白点对齐就停</p> +</li> +</ul> +<h3 id="其他" class="heading-element"><span>其他</span> + <a href="#%e5%85%b6%e4%bb%96" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>尽量 3 档</p> +</li> +<li> +<p>能停就停</p> +</li> +<li> +<p>别忘了转向灯</p> +</li> +<li> +<p>别停在斑马线</p> +</li> +</ul>Pytest Fixture Notehttp://xiaolong.fun/posts/pytest-fixture-note/Sat, 16 Mar 2019 00:00:00 +0000http://xiaolong.fun/posts/pytest-fixture-note/笔记测试<img src="http://xiaolong.fun/images/posts/pytest-fixture-note/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><p>最近在学习实践自动化相关的知识,最终选用 pytest 来组织测试用例。</p> +<p>本文是 pytest 学习笔记的第一篇。</p> +<p>Fixture 是 pytest 中的一个基本概念,可以简单理解为在测试用例前需要执行的内容,我用来初始化环境、准备数据等工作。</p> +<h2 id="fixture" class="heading-element"><span>Fixture</span> + <a href="#fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p>在被当做 fixture 的函数前面加上<code> @pytest.fixture</code>来定义一个 Fixture</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">before</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">before each test&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="scope" class="heading-element"><span>Scope</span> + <a href="#scope" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li>function:每个 test 都运行,默认是 function 的 scope</li> +<li>class:每个 class 的所有 test 只运行一次</li> +<li>module:每个 module 的所有 test 只运行一次</li> +<li>session:每个 session 只运行一次</li> +</ul> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span><span class="lnt">11 +</span><span class="lnt">12 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&#34;module&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#yield下面是teardown内容</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_ehlo</span><span class="p">(</span><span class="n">smtp</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"><span class="c1">#fixture的function名称,可以直接作为参数,传给需要使用它的测试样例。 在使用时,smtp并非前面定义的function,而是function的返回值,即smtplib.SMTP</span> +</span></span><span class="line"><span class="cl"> <span class="n">response</span><span class="p">,</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">smtp</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">response</span> <span class="o">==</span> <span class="mi">250</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="sa">b</span><span class="s2">&#34;smtp.gmail.com&#34;</span> <span class="ow">in</span> <span class="n">msg</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="conftestpy" class="heading-element"><span>conftest.py</span> + <a href="#conftestpy" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>conftest.py</code>是 pytest 的默认配置文件,可以在其中放公用的 fixture 或 plugin。</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span><span class="lnt">6 +</span><span class="lnt">7 +</span><span class="lnt">8 +</span><span class="lnt">9 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tests +</span></span><span class="line"><span class="cl">├── conftest.py +</span></span><span class="line"><span class="cl">├── test_a.py +</span></span><span class="line"><span class="cl">├── test_b.py +</span></span><span class="line"><span class="cl">└── sub +</span></span><span class="line"><span class="cl"> ├── __init__.py +</span></span><span class="line"><span class="cl"> ├── conftest.py +</span></span><span class="line"><span class="cl"> ├── test_c.py +</span></span><span class="line"><span class="cl"> └── test_d.py</span></span></code></pre></td></tr></table> +</div> +</div><p><code>conftest.py</code>遵守就近原则,会优先使用层级最近的 conftest 中定义的 Fixture。同时外层的测试用例 a,b 不能使用内层<code>conftest.py</code>中定义的 fixture</p> +<h2 id="use-fixture" class="heading-element"><span>Use Fixture</span> + <a href="#use-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h3 id="1-当做参数直接调用" class="heading-element"><span>1. 当做参数直接调用</span> + <a href="#1-%e5%bd%93%e5%81%9a%e5%8f%82%e6%95%b0%e7%9b%b4%e6%8e%a5%e8%b0%83%e7%94%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&#34;module&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_ehlo</span><span class="p">(</span><span class="n">smtp</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">response</span><span class="p">,</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">smtp</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">response</span> <span class="o">==</span> <span class="mi">250</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="sa">b</span><span class="s2">&#34;smtp.gmail.com&#34;</span> <span class="ow">in</span> <span class="n">msg</span></span></span></code></pre></td></tr></table> +</div> +</div><p>fixture 的 function 名称,可以直接作为参数,传给需要使用它的测试样例。 在使用时,<code>smtp</code>并非前面定义的 function,而是 function 的返回值,即<code>smtplib.SMTP</code></p> +<h3 id="2-在函数前用-fixture-decorator-调用" class="heading-element"><span>2. 在函数前用 Fixture Decorator 调用</span> + <a href="#2-%e5%9c%a8%e5%87%bd%e6%95%b0%e5%89%8d%e7%94%a8-fixture-decorator-%e8%b0%83%e7%94%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span><span class="lnt">11 +</span><span class="lnt">12 +</span><span class="lnt">13 +</span><span class="lnt">14 +</span><span class="lnt">15 +</span><span class="lnt">16 +</span><span class="lnt">17 +</span><span class="lnt">18 +</span><span class="lnt">19 +</span><span class="lnt">20 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_1</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Test1</span><span class="p">:</span> +</span></span><span class="line"><span class="cl"> <span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_3</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"> <span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_4</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_2()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Test2</span><span class="p">:</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_5</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_6</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_2()&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="3-用-autouse-调用-fixture" class="heading-element"><span>3. 用 Autouse 调用 Fixture</span> + <a href="#3-%e7%94%a8-autouse-%e8%b0%83%e7%94%a8-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p>fixture decorator 一个 optional 的参数是<code>autouse</code>, 默认设置为 False。 +当默认为 False,就可以选择用上面两种方式来试用 fixture。 +当设置为 True 时,在一个 session 内的所有的 test 都会自动调用这个 fixture。</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">before</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">before each test&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="finallizer" class="heading-element"><span>Finallizer</span> + <a href="#finallizer" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">fin</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#释放函数</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span> <span class="p">(</span><span class="s2">&#34;teardown smtp&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="n">request</span><span class="o">.</span><span class="n">addfinalizer</span><span class="p">(</span><span class="n">fin</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#测试完成后调用</span> +</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">smtp</span></span></span></code></pre></td></tr></table> +</div> +</div><p>通过<code>addfinallizer()</code>注册释放函数</p> +<h2 id="parametrizing" class="heading-element"><span>Parametrizing</span> + <a href="#parametrizing" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p>fixture 可以通过参数化来循环使用预设的参数</p> +<h3 id="1-params" class="heading-element"><span>1. params</span> + <a href="#1-params" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span><span class="lnt">6 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">params</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="s2">&#34;mail.python.org&#34;</span><span class="p">])</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">param</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span> <span class="p">(</span><span class="s2">&#34;finalizing </span><span class="si">%s</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="n">smtp</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></span></span></code></pre></td></tr></table> +</div> +</div><p>在<code> @pytest.fixture</code>中,指定参数<code>params</code>,就可以利用特殊对象(<code>request</code>)来引用<code>request.param</code>。 使用以上带参数的 smtp 的测试样例,都会被执行两次。</p> +<h3 id="2-pytestmarkparametrize" class="heading-element"><span>2. @pytest.mark.parametrize</span> + <a href="#2-pytestmarkparametrize" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="nd">@pytest.mark.parametrize</span><span class="p">(</span><span class="s2">&#34;test_input, expected&#34;</span><span class="p">,</span> <span class="p">[</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="mi">2</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="mi">4</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="mi">1</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"><span class="p">])</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_add</span><span class="p">(</span><span class="n">test_input</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">expected</span> <span class="o">==</span> <span class="n">add</span><span class="p">(</span><span class="n">test_input</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">test_input</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="build-in-fixture" class="heading-element"><span>Build-in Fixture</span> + <a href="#build-in-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p><code>pytest --fixtures</code>可以列出所有可用的 fixture,包括内置的、插件中的、以及当前项目定义的。</p> +<h3 id="capsys" class="heading-element"><span>capsys</span> + <a href="#capsys" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>capsys</code>可以捕捉测试 function 的标准输出</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_print</span><span class="p">(</span><span class="n">capsys</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;hello&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">out</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">capsys</span><span class="o">.</span><span class="n">readouterr</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="s1">&#39;hello&#39;</span> <span class="o">==</span> <span class="n">out</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="tmpdir" class="heading-element"><span>tmpdir</span> + <a href="#tmpdir" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>tmpdir</code>则可以自动创建临时文件夹</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_path</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="kn">from</span> <span class="nn">py._path.local</span> <span class="kn">import</span> <span class="n">LocalPath</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">,</span> <span class="n">LocalPath</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="kn">from</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="n">isdir</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">isdir</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">))</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="参考" class="heading-element"><span>参考</span> + <a href="#%e5%8f%82%e8%80%83" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><ul> +<li><a href="http://note.qidong.name/2018/01/pytest-fixture/"target="_blank" rel="external nofollow noopener noreferrer">《Pytest 中的 Fixture》</a></li> +<li><a href="http://senarukana.github.io/2015/05/29/pytest-fixture/"target="_blank" rel="external nofollow noopener noreferrer">《Pytest Fixture》</a></li> +<li><a href="https://docs.pytest.org/en/latest/fixture.html#fixture-finalization-executing-teardown-code"target="_blank" rel="external nofollow noopener noreferrer">《pytest fixtures: explicit, modular, scalable》</a></li> +</ul> \ No newline at end of file diff --git a/collections/index.html b/collections/index.html index 95f6c82..fcb2168 100644 --- a/collections/index.html +++ b/collections/index.html @@ -1,4 +1,4 @@ 所有合集 - 洋葱的自留地 -

所有合集 0

0%
\ No newline at end of file diff --git a/index.html b/index.html index 693ce46..97b21c6 100644 --- a/index.html +++ b/index.html @@ -1,9 +1,9 @@ -洋葱的自留地 -

Android App 集合

0%
\ No newline at end of file +洋葱
0%
\ No newline at end of file diff --git a/index.xml b/index.xml index ca9d066..0c55a2e 100644 --- a/index.xml +++ b/index.xml @@ -1,4 +1,4 @@ -洋葱的自留地http://xiaolong.fun/洋葱的自留地Hugo 0.137.0 & FixIt v0.3.14zh-CNTue, 05 Nov 2024 00:00:00 +0000Android App 集合http://xiaolong.fun/posts/awesome-android-app/Tue, 05 Nov 2024 00:00:00 +0000http://xiaolong.fun/posts/awesome-android-app/笔记Android<img src="http://xiaolong.fun/images/posts/awesome-android-app/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><h2 id="system" class="heading-element"><span>System</span> +洋葱的自留地http://xiaolong.fun/洋葱的自留地7616145989362176075511352571992064Hugo 0.137.1 & FixIt v0.3.14zh-CNTue, 05 Nov 2024 00:00:00 +0000Android App 集合http://xiaolong.fun/posts/awesome-android-app/Tue, 05 Nov 2024 00:00:00 +0000http://xiaolong.fun/posts/awesome-android-app/笔记Android<img src="http://xiaolong.fun/images/posts/awesome-android-app/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><h2 id="system" class="heading-element"><span>System</span> <a href="#system" class="heading-mark"> <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> </a> @@ -255,9 +255,7 @@ </h4><ul> <li>下载地址: <a href="https://t.me/ys_tvb"target="_blank" rel="external nofollow noopener noreferrer">https://t.me/ys_tvb</a></li> <li>介绍: &ldquo;看电视&rdquo;</li> -</ul> -<hr> -<p>This message is used to verify that this feed (feedId:76161459893621760) belongs to me (userId:75511352571992064). Join me in enjoying the next generation information browser <a href="https://follow.is"target="_blank" rel="external nofollow noopener noreferrer">https://follow.is</a>.</p>驾考宝典http://xiaolong.fun/posts/driver-note/Tue, 23 Mar 2021 00:00:00 +0000http://xiaolong.fun/posts/driver-note/笔记生活<img src="http://xiaolong.fun/images/posts/driver-note/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><p>在考驾照这件事情上,我真的是拖延症晚期发作。</p> +</ul>驾考宝典http://xiaolong.fun/posts/driver-note/Tue, 23 Mar 2021 00:00:00 +0000http://xiaolong.fun/posts/driver-note/笔记生活<img src="http://xiaolong.fun/images/posts/driver-note/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><p>在考驾照这件事情上,我真的是拖延症晚期发作。</p> <p>从报名到开始考,前前后后过了 4 年时间。</p> <p>为了中间能回忆起之前练得内容,就把每个考试想进行了记录。</p> <p>这篇文章也是因为有朋友询问,索性发到博客里,也算解救写博客的懒癌晚期,一举多得。</p> diff --git a/lib/sharer/sharer.min.js b/lib/sharer/sharer.min.js deleted file mode 100644 index 953a451..0000000 --- a/lib/sharer/sharer.min.js +++ /dev/null @@ -1 +0,0 @@ -(function(m,r){"use strict";var s=function(t){this.elem=t};s.init=function(){var t=r.querySelectorAll("[data-sharer]"),e,a=t.length;for(e=0;e0?"?":"";for(r=0;r离线 - 洋葱的自留地 -

离线

0%
\ No newline at end of file +洋葱
0%
\ No newline at end of file diff --git a/posts/awesome-android-app/index.html b/posts/awesome-android-app/index.html index 4c165cd..0140182 100644 --- a/posts/awesome-android-app/index.html +++ b/posts/awesome-android-app/index.html @@ -1,6 +1,6 @@ Android App 集合 - 洋葱的自留地 -

Android App 集合

目录 +

Android App 集合

System

Termux

Doodle @@ -40,8 +40,7 @@

NewPipe

Nekogram

FongMi -


This message is used to verify that this feed (feedId:76161459893621760) belongs to me (userId:75511352571992064). Join me in enjoying the next generation information browser https://follow.is.

0%
\ No newline at end of file +洋葱
0%
\ No newline at end of file diff --git a/posts/awesome-android-app/index.md b/posts/awesome-android-app/index.md index c64fbae..8898e33 100644 --- a/posts/awesome-android-app/index.md +++ b/posts/awesome-android-app/index.md @@ -157,10 +157,6 @@ - 下载地址: https://t.me/ys_tvb - 介绍: "看电视" ---- - -This message is used to verify that this feed (feedId:76161459893621760) belongs to me (userId:75511352571992064). Join me in enjoying the next generation information browser https://follow.is. - --- diff --git a/posts/driver-note/index.html b/posts/driver-note/index.html index 3abbf46..e37f520 100644 --- a/posts/driver-note/index.html +++ b/posts/driver-note/index.html @@ -8,7 +8,7 @@ 从报名到开始考,前前后后过了 4 年时间。 为了中间能回忆起之前练得内容,就把每个考试想进行了记录。">

驾考宝典

0%
\ No newline at end of file +洋葱
0%
\ No newline at end of file diff --git a/posts/index.html b/posts/index.html index f6af062..e5ddd3d 100644 --- a/posts/index.html +++ b/posts/index.html @@ -1,7 +1,7 @@ 所有文章 - 洋葱的自留地 -

所有文章 3

总计约 2.98K 字

2024

0%
\ No newline at end of file +洋葱
0%
\ No newline at end of file diff --git a/posts/index.xml b/posts/index.xml index 8e3d770..1f1ee1f 100644 --- a/posts/index.xml +++ b/posts/index.xml @@ -1,4 +1,4 @@ -所有文章 - 洋葱的自留地http://xiaolong.fun/posts/洋葱的自留地Hugo 0.137.0 & FixIt v0.3.14zh-CNTue, 05 Nov 2024 00:00:00 +0000Android App 集合http://xiaolong.fun/posts/awesome-android-app/Tue, 05 Nov 2024 00:00:00 +0000http://xiaolong.fun/posts/awesome-android-app/笔记Android<h2 id="system" class="heading-element"><span>System</span> +所有文章 - 洋葱的自留地http://xiaolong.fun/posts/洋葱的自留地7616145989362176075511352571992064Hugo 0.137.1 & FixIt v0.3.14zh-CNTue, 05 Nov 2024 00:00:00 +0000Android App 集合http://xiaolong.fun/posts/awesome-android-app/Tue, 05 Nov 2024 00:00:00 +0000http://xiaolong.fun/posts/awesome-android-app/笔记Android<h2 id="system" class="heading-element"><span>System</span> <a href="#system" class="heading-mark"> <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> </a> diff --git a/posts/pytest-fixture-note/index.html b/posts/pytest-fixture-note/index.html index 60a63aa..8e307a3 100644 --- a/posts/pytest-fixture-note/index.html +++ b/posts/pytest-fixture-note/index.html @@ -4,7 +4,7 @@ ">

Pytest Fixture Note

0%
\ No newline at end of file +洋葱
0%
\ No newline at end of file diff --git a/service-worker.min.js b/service-worker.min.js new file mode 100644 index 0000000..d9249a6 --- /dev/null +++ b/service-worker.min.js @@ -0,0 +1 @@ +(()=>{CACHE_VERSION=1;var h=["/css/style.min.css","/js/theme.min.js","/site.webmanifest"],E=["/css/style.min.css","/js/theme.min.js","/site.webmanifest","/offline/"],m=["/css/style.min.css","/js/theme.min.js","/site.webmanifest","/404.html"],d="/offline/",C="/404.html",i={assets:"assets-v"+CACHE_VERSION,content:"content-v"+CACHE_VERSION,offline:"offline-v"+CACHE_VERSION,notFound:"404-v"+CACHE_VERSION},u={"/":3600,html:3600,json:86400,js:86400,css:86400},f=[e=>!e.startsWith("http://localhost")],_=["GET"];function A(e){return f.length>0?!f.filter(t=>typeof t=="function"?!t(e):!1).length:!1}function O(e){let t=e.split(".").reverse()[0].split("?")[0];return t.endsWith("/")?"/":t}function g(e){if(typeof e=="string"){let t=O(e);return typeof u[t]=="number"?u[t]:null}else return null}function S(){return Promise.all([caches.open(i.assets).then(e=>e.addAll(h)),caches.open(i.offline).then(e=>e.addAll(E)),caches.open(i.notFound).then(e=>e.addAll(m))]).then(()=>self.skipWaiting())}function F(){let e=Object.keys(i).map(t=>i[t]);return new Promise((t,s)=>{caches.keys().then(n=>n.filter(r=>!~e.indexOf(r))).then(n=>{n.length?Promise.all(n.map(r=>caches.delete(r))).then(()=>{t()}).catch(r=>{s(r)}):t()}).catch(n=>{s(n)})})}self.addEventListener("install",e=>{e.waitUntil(Promise.all([S(),self.skipWaiting()]))});self.addEventListener("activate",e=>{e.waitUntil(Promise.all([F(),self.clients.claim(),self.skipWaiting()]).catch(t=>{console.log(t),self.skipWaiting()}))});self.addEventListener("fetch",e=>{e.respondWith(caches.open(i.content).then(t=>t.match(e.request).then(s=>{if(s){let n=s.headers.entries(),r=null;for(let c of n)c[0]==="date"&&(r=new Date(c[1]));if(r){let c=parseInt((new Date().getTime()-r.getTime())/1e3),o=g(e.request.url);return o&&c>o?new Promise(l=>fetch(e.request.clone()).then(a=>{a?(t.put(e.request,a.clone()),l(a)):l(s)}).catch(()=>{l(s)})).catch(l=>(console.log(l),s)):s}else return s}else return null}).then(s=>s||fetch(e.request.clone()).then(n=>n.status<400?(~_.indexOf(e.request.method)&&!A(e.request.url)&&e.request.url.slice(0,4)==="http"&&t.put(e.request,n.clone()),n):caches.open(i.notFound).then(r=>r.match(C))).then(n=>{if(n)return n}).catch(()=>caches.open(i.offline).then(n=>n.match(d)))).catch(s=>{throw console.error(" Error in fetch handler:",s),s})))});})(); diff --git a/tags/android/index.html b/tags/android/index.html index 0864a0d..8d4b52a 100644 --- a/tags/android/index.html +++ b/tags/android/index.html @@ -1,5 +1,5 @@ Android - 标签 - 洋葱的自留地 -

Android 1

2024

0%
\ No newline at end of file diff --git a/tags/android/index.xml b/tags/android/index.xml index 6417171..1da5cc6 100644 --- a/tags/android/index.xml +++ b/tags/android/index.xml @@ -1,4 +1,4 @@ -Android - 标签 - 洋葱的自留地http://xiaolong.fun/tags/android/洋葱的自留地Hugo 0.137.0 & FixIt v0.3.14zh-CNTue, 05 Nov 2024 00:00:00 +0000Android App 集合http://xiaolong.fun/posts/awesome-android-app/Tue, 05 Nov 2024 00:00:00 +0000http://xiaolong.fun/posts/awesome-android-app/笔记Android<h2 id="system" class="heading-element"><span>System</span> +Android - 标签 - 洋葱的自留地http://xiaolong.fun/tags/android/洋葱的自留地7616145989362176075511352571992064Hugo 0.137.1 & FixIt v0.3.14zh-CNTue, 05 Nov 2024 00:00:00 +0000Android App 集合http://xiaolong.fun/posts/awesome-android-app/Tue, 05 Nov 2024 00:00:00 +0000http://xiaolong.fun/posts/awesome-android-app/笔记Android<img src="http://xiaolong.fun/images/posts/awesome-android-app/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><h2 id="system" class="heading-element"><span>System</span> <a href="#system" class="heading-mark"> <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> </a> @@ -9,4 +9,250 @@ </h4><ul> <li>下载地址: <a href="https://github.com/termux/termux-app/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/termux/termux-app/releases</a></li> <li>介绍: &ldquo;a terminal emulator application for Android OS extendible by variety of packages.&rdquo;</li> +</ul> +<h4 id="doodle" class="heading-element"><span>Doodle</span> + <a href="#doodle" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://f-droid.org/packages/xyz.zedler.patrick.doodle/"target="_blank" rel="external nofollow noopener noreferrer">https://f-droid.org/packages/xyz.zedler.patrick.doodle/</a></li> +<li>介绍: &ldquo;Colorful live wallpapers with auto dark mode and power-efficient animations&rdquo;</li> +</ul> +<h4 id="materialfiles" class="heading-element"><span>MaterialFiles</span> + <a href="#materialfiles" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/zhanghai/MaterialFiles/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/zhanghai/MaterialFiles/releases</a></li> +<li>介绍: &ldquo;Material Design file manager for Android.&rdquo;</li> +</ul> +<h4 id="appops" class="heading-element"><span>AppOps</span> + <a href="#appops" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://appops.rikka.app/download/"target="_blank" rel="external nofollow noopener noreferrer">https://appops.rikka.app/download/</a></li> +<li>介绍: &ldquo;Control the hidden appops conveniently&rdquo;</li> +</ul> +<h4 id="shizuku" class="heading-element"><span>Shizuku</span> + <a href="#shizuku" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://shizuku.rikka.app/zh-hans/"target="_blank" rel="external nofollow noopener noreferrer">https://shizuku.rikka.app/zh-hans/</a></li> +<li>介绍: &ldquo;让你的应用直接使用系统 API&rdquo;</li> +</ul> +<h4 id="hail" class="heading-element"><span>Hail</span> + <a href="#hail" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/aistra0528/Hail/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/aistra0528/Hail/releases</a></li> +<li>介绍: &ldquo;Disable / Hide / Suspend / Uninstall Android apps without root.&rdquo;</li> +</ul> +<h4 id="installerx" class="heading-element"><span>InstallerX</span> + <a href="#installerx" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/iamr0s/InstallerX/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/iamr0s/InstallerX/releases</a></li> +<li>介绍: &ldquo;A modern and functional Android app installer.&rdquo;</li> +</ul> +<h4 id="dhizuku_v28" class="heading-element"><span>Dhizuku_v2.8</span> + <a href="#dhizuku_v28" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="accounts_v15" class="heading-element"><span>Accounts_v1.5</span> + <a href="#accounts_v15" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="shizukurunner_17" class="heading-element"><span>ShizukuRunner_17</span> + <a href="#shizukurunner_17" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h2 id="shop" class="heading-element"><span>Shop</span> + <a href="#shop" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="coolapk" class="heading-element"><span>Coolapk</span> + <a href="#coolapk" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://www.coolapk.com/apk/com.coolapk.market"target="_blank" rel="external nofollow noopener noreferrer">https://www.coolapk.com/apk/com.coolapk.market</a></li> +</ul> +<h4 id="obtainium" class="heading-element"><span>Obtainium</span> + <a href="#obtainium" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/ImranR98/Obtainium/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/ImranR98/Obtainium/releases</a></li> +<li>介绍: &ldquo;Get Android app updates straight from the source. &quot;</li> +</ul> +<h4 id="apkpure_v31973_noad" class="heading-element"><span>APKPure_v3.19.73_NoAD</span> + <a href="#apkpure_v31973_noad" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="aurorastore" class="heading-element"><span>AuroraStore</span> + <a href="#aurorastore" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://gitlab.com/AuroraOSS/AuroraStore"target="_blank" rel="external nofollow noopener noreferrer">https://gitlab.com/AuroraOSS/AuroraStore</a></li> +<li>介绍: &ldquo;An unofficial FOSS client to Google Play.&rdquo;</li> +</ul> +<h4 id="neostore" class="heading-element"><span>NeoStore</span> + <a href="#neostore" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/NeoApplications/Neo-Store/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/NeoApplications/Neo-Store/releases</a></li> +<li>介绍: &ldquo;An F-Droid client with modern UI and an arsenal of extra features.&rdquo;</li> +</ul> +<h4 id="apkupdater" class="heading-element"><span>APKUpdater</span> + <a href="#apkupdater" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/rumboalla/apkupdater/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/rumboalla/apkupdater/releases</a></li> +<li>介绍: &ldquo;APKUpdater is an open source tool that simplifies the process of finding updates for your installed apps.&rdquo;</li> +</ul> +<h2 id="remote" class="heading-element"><span>Remote</span> + <a href="#remote" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="xbxplay_v140_cracked" class="heading-element"><span>XBXPlay_v1.4.0_Cracked</span> + <a href="#xbxplay_v140_cracked" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="xbox" class="heading-element"><span>Xbox</span> + <a href="#xbox" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://www.xbox.com/en-US/apps/xbox-app-for-mobile"target="_blank" rel="external nofollow noopener noreferrer">https://www.xbox.com/en-US/apps/xbox-app-for-mobile</a></li> +<li>介绍: &ldquo;Learn about the new Xbox app for mobile, which keeps you connected to the fun with your friends, games, and console from your phone or tablet while on the go.&rdquo;</li> +</ul> +<h4 id="remotedesktop" class="heading-element"><span>RemoteDesktop</span> + <a href="#remotedesktop" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://www.apkmirror.com/apk/microsoft-corporation/microsoft-remote-desktop-preview/"target="_blank" rel="external nofollow noopener noreferrer">https://www.apkmirror.com/apk/microsoft-corporation/microsoft-remote-desktop-preview/</a></li> +<li>介绍: &ldquo;Download Remote Desktop APKs for Android&rdquo;</li> +</ul> +<h4 id="qbitcontroller" class="heading-element"><span>qBitController</span> + <a href="#qbitcontroller" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://f-droid.org/zh_Hant/packages/dev.bartuzen.qbitcontroller/index.html"target="_blank" rel="external nofollow noopener noreferrer">https://f-droid.org/zh_Hant/packages/dev.bartuzen.qbitcontroller/index.html</a></li> +<li>介绍: &ldquo;一款能从 Android 设备中远程控制 qBittorrent 的软件。&rdquo;</li> +</ul> +<h4 id="moonlight" class="heading-element"><span>Moonlight</span> + <a href="#moonlight" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/moonlight-stream/moonlight-android/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/moonlight-stream/moonlight-android/releases</a></li> +<li>介绍: &ldquo;GameStream client for Android&rdquo;</li> +</ul> +<h4 id="acode" class="heading-element"><span>Acode</span> + <a href="#acode" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/deadlyjack/Acode/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/deadlyjack/Acode/releases</a></li> +<li>介绍: &ldquo;Acode - powerful text/code editor for android.&rdquo;</li> +</ul> +<h2 id="read" class="heading-element"><span>Read</span> + <a href="#read" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="readyou" class="heading-element"><span>ReadYou</span> + <a href="#readyou" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/Ashinch/ReadYou/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/Ashinch/ReadYou/releases</a></li> +<li>介绍: &ldquo;An Android RSS reader presented in Material You style&rdquo;</li> +</ul> +<h4 id="moonreader_90_crack" class="heading-element"><span>MoonReader_9.0_Crack</span> + <a href="#moonreader_90_crack" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h4 id="mangareader_073" class="heading-element"><span>MangaReader_0.7.3</span> + <a href="#mangareader_073" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><h2 id="network" class="heading-element"><span>Network</span> + <a href="#network" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="zerotier-one" class="heading-element"><span>ZeroTier One</span> + <a href="#zerotier-one" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://download.zerotier.com/dist/"target="_blank" rel="external nofollow noopener noreferrer">https://download.zerotier.com/dist/</a></li> +</ul> +<h4 id="tailscale" class="heading-element"><span>Tailscale</span> + <a href="#tailscale" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://f-droid.org/zh_Hant/packages/com.tailscale.ipn/"target="_blank" rel="external nofollow noopener noreferrer">https://f-droid.org/zh_Hant/packages/com.tailscale.ipn/</a></li> +<li>介绍: &ldquo;Mesh VPN based on WireGuard&rdquo;</li> +</ul> +<h4 id="flclash" class="heading-element"><span>FlClash</span> + <a href="#flclash" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/chen08209/FlClash/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/chen08209/FlClash/releases</a></li> +<li>介绍: &ldquo;A multi-platform proxy client based on ClashMeta,simple and easy to use, open-source and ad-free.&rdquo;</li> +</ul> +<h2 id="fun" class="heading-element"><span>Fun</span> + <a href="#fun" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h4 id="yamby" class="heading-element"><span>Yamby</span> + <a href="#yamby" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://t.me/yamby_release"target="_blank" rel="external nofollow noopener noreferrer">https://t.me/yamby_release</a></li> +<li>介绍: &ldquo;Yet Another Emby Client!&rdquo;</li> +</ul> +<h4 id="pilix" class="heading-element"><span>PiliX</span> + <a href="#pilix" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/guozhigq/pilipala/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/guozhigq/pilipala/releases</a></li> +<li>介绍: &ldquo;PiliPala 是使用 Flutter 开发的 BiliBili 第三方客户端。&rdquo;</li> +</ul> +<h4 id="newpipe" class="heading-element"><span>NewPipe</span> + <a href="#newpipe" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/TeamNewPipe/NewPipe/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/TeamNewPipe/NewPipe/releases</a></li> +<li>介绍: &ldquo;A libre lightweight streaming front-end for Android.&rdquo;</li> +</ul> +<h4 id="nekogram" class="heading-element"><span>Nekogram</span> + <a href="#nekogram" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://github.com/Nekogram/Nekogram/releases"target="_blank" rel="external nofollow noopener noreferrer">https://github.com/Nekogram/Nekogram/releases</a></li> +<li>介绍: &ldquo;Open-source third-party Telegram client with few but useful mods.&rdquo;</li> +</ul> +<h4 id="fongmi" class="heading-element"><span>FongMi</span> + <a href="#fongmi" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ul> +<li>下载地址: <a href="https://t.me/ys_tvb"target="_blank" rel="external nofollow noopener noreferrer">https://t.me/ys_tvb</a></li> +<li>介绍: &ldquo;看电视&rdquo;</li> </ul> \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index 42ac39c..05260b8 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1,4 +1,4 @@ 所有标签 - 洋葱的自留地 -
0%
\ No newline at end of file diff --git a/tags/pytest/index.html b/tags/pytest/index.html index 458f5ee..74360f1 100644 --- a/tags/pytest/index.html +++ b/tags/pytest/index.html @@ -1,5 +1,5 @@ Pytest - 标签 - 洋葱的自留地 -

Pytest 1

2019

0%
\ No newline at end of file diff --git a/tags/pytest/index.xml b/tags/pytest/index.xml index c04d72a..c72dfec 100644 --- a/tags/pytest/index.xml +++ b/tags/pytest/index.xml @@ -1,2 +1,326 @@ -Pytest - 标签 - 洋葱的自留地http://xiaolong.fun/tags/pytest/洋葱的自留地Hugo 0.137.0 & FixIt v0.3.14zh-CNSat, 16 Mar 2019 00:00:00 +0000Pytest Fixture Notehttp://xiaolong.fun/posts/pytest-fixture-note/Sat, 16 Mar 2019 00:00:00 +0000http://xiaolong.fun/posts/pytest-fixture-note/笔记测试<p>最近在学习实践自动化相关的知识,最终选用 pytest 来组织测试用例。</p> -<p>本文是 pytest 学习笔记的第一篇。</p> \ No newline at end of file +Pytest - 标签 - 洋葱的自留地http://xiaolong.fun/tags/pytest/洋葱的自留地7616145989362176075511352571992064Hugo 0.137.1 & FixIt v0.3.14zh-CNSat, 16 Mar 2019 00:00:00 +0000Pytest Fixture Notehttp://xiaolong.fun/posts/pytest-fixture-note/Sat, 16 Mar 2019 00:00:00 +0000http://xiaolong.fun/posts/pytest-fixture-note/笔记测试<img src="http://xiaolong.fun/images/posts/pytest-fixture-note/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><p>最近在学习实践自动化相关的知识,最终选用 pytest 来组织测试用例。</p> +<p>本文是 pytest 学习笔记的第一篇。</p> +<p>Fixture 是 pytest 中的一个基本概念,可以简单理解为在测试用例前需要执行的内容,我用来初始化环境、准备数据等工作。</p> +<h2 id="fixture" class="heading-element"><span>Fixture</span> + <a href="#fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p>在被当做 fixture 的函数前面加上<code> @pytest.fixture</code>来定义一个 Fixture</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">before</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">before each test&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="scope" class="heading-element"><span>Scope</span> + <a href="#scope" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li>function:每个 test 都运行,默认是 function 的 scope</li> +<li>class:每个 class 的所有 test 只运行一次</li> +<li>module:每个 module 的所有 test 只运行一次</li> +<li>session:每个 session 只运行一次</li> +</ul> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span><span class="lnt">11 +</span><span class="lnt">12 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&#34;module&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#yield下面是teardown内容</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_ehlo</span><span class="p">(</span><span class="n">smtp</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"><span class="c1">#fixture的function名称,可以直接作为参数,传给需要使用它的测试样例。 在使用时,smtp并非前面定义的function,而是function的返回值,即smtplib.SMTP</span> +</span></span><span class="line"><span class="cl"> <span class="n">response</span><span class="p">,</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">smtp</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">response</span> <span class="o">==</span> <span class="mi">250</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="sa">b</span><span class="s2">&#34;smtp.gmail.com&#34;</span> <span class="ow">in</span> <span class="n">msg</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="conftestpy" class="heading-element"><span>conftest.py</span> + <a href="#conftestpy" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>conftest.py</code>是 pytest 的默认配置文件,可以在其中放公用的 fixture 或 plugin。</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span><span class="lnt">6 +</span><span class="lnt">7 +</span><span class="lnt">8 +</span><span class="lnt">9 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tests +</span></span><span class="line"><span class="cl">├── conftest.py +</span></span><span class="line"><span class="cl">├── test_a.py +</span></span><span class="line"><span class="cl">├── test_b.py +</span></span><span class="line"><span class="cl">└── sub +</span></span><span class="line"><span class="cl"> ├── __init__.py +</span></span><span class="line"><span class="cl"> ├── conftest.py +</span></span><span class="line"><span class="cl"> ├── test_c.py +</span></span><span class="line"><span class="cl"> └── test_d.py</span></span></code></pre></td></tr></table> +</div> +</div><p><code>conftest.py</code>遵守就近原则,会优先使用层级最近的 conftest 中定义的 Fixture。同时外层的测试用例 a,b 不能使用内层<code>conftest.py</code>中定义的 fixture</p> +<h2 id="use-fixture" class="heading-element"><span>Use Fixture</span> + <a href="#use-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h3 id="1-当做参数直接调用" class="heading-element"><span>1. 当做参数直接调用</span> + <a href="#1-%e5%bd%93%e5%81%9a%e5%8f%82%e6%95%b0%e7%9b%b4%e6%8e%a5%e8%b0%83%e7%94%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&#34;module&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_ehlo</span><span class="p">(</span><span class="n">smtp</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">response</span><span class="p">,</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">smtp</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">response</span> <span class="o">==</span> <span class="mi">250</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="sa">b</span><span class="s2">&#34;smtp.gmail.com&#34;</span> <span class="ow">in</span> <span class="n">msg</span></span></span></code></pre></td></tr></table> +</div> +</div><p>fixture 的 function 名称,可以直接作为参数,传给需要使用它的测试样例。 在使用时,<code>smtp</code>并非前面定义的 function,而是 function 的返回值,即<code>smtplib.SMTP</code></p> +<h3 id="2-在函数前用-fixture-decorator-调用" class="heading-element"><span>2. 在函数前用 Fixture Decorator 调用</span> + <a href="#2-%e5%9c%a8%e5%87%bd%e6%95%b0%e5%89%8d%e7%94%a8-fixture-decorator-%e8%b0%83%e7%94%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span><span class="lnt">11 +</span><span class="lnt">12 +</span><span class="lnt">13 +</span><span class="lnt">14 +</span><span class="lnt">15 +</span><span class="lnt">16 +</span><span class="lnt">17 +</span><span class="lnt">18 +</span><span class="lnt">19 +</span><span class="lnt">20 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_1</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Test1</span><span class="p">:</span> +</span></span><span class="line"><span class="cl"> <span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_3</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"> <span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_4</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_2()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Test2</span><span class="p">:</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_5</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_6</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_2()&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="3-用-autouse-调用-fixture" class="heading-element"><span>3. 用 Autouse 调用 Fixture</span> + <a href="#3-%e7%94%a8-autouse-%e8%b0%83%e7%94%a8-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p>fixture decorator 一个 optional 的参数是<code>autouse</code>, 默认设置为 False。 +当默认为 False,就可以选择用上面两种方式来试用 fixture。 +当设置为 True 时,在一个 session 内的所有的 test 都会自动调用这个 fixture。</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">before</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">before each test&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="finallizer" class="heading-element"><span>Finallizer</span> + <a href="#finallizer" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">fin</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#释放函数</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span> <span class="p">(</span><span class="s2">&#34;teardown smtp&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="n">request</span><span class="o">.</span><span class="n">addfinalizer</span><span class="p">(</span><span class="n">fin</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#测试完成后调用</span> +</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">smtp</span></span></span></code></pre></td></tr></table> +</div> +</div><p>通过<code>addfinallizer()</code>注册释放函数</p> +<h2 id="parametrizing" class="heading-element"><span>Parametrizing</span> + <a href="#parametrizing" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p>fixture 可以通过参数化来循环使用预设的参数</p> +<h3 id="1-params" class="heading-element"><span>1. params</span> + <a href="#1-params" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span><span class="lnt">6 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">params</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="s2">&#34;mail.python.org&#34;</span><span class="p">])</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">param</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span> <span class="p">(</span><span class="s2">&#34;finalizing </span><span class="si">%s</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="n">smtp</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></span></span></code></pre></td></tr></table> +</div> +</div><p>在<code> @pytest.fixture</code>中,指定参数<code>params</code>,就可以利用特殊对象(<code>request</code>)来引用<code>request.param</code>。 使用以上带参数的 smtp 的测试样例,都会被执行两次。</p> +<h3 id="2-pytestmarkparametrize" class="heading-element"><span>2. @pytest.mark.parametrize</span> + <a href="#2-pytestmarkparametrize" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="nd">@pytest.mark.parametrize</span><span class="p">(</span><span class="s2">&#34;test_input, expected&#34;</span><span class="p">,</span> <span class="p">[</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="mi">2</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="mi">4</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="mi">1</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"><span class="p">])</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_add</span><span class="p">(</span><span class="n">test_input</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">expected</span> <span class="o">==</span> <span class="n">add</span><span class="p">(</span><span class="n">test_input</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">test_input</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="build-in-fixture" class="heading-element"><span>Build-in Fixture</span> + <a href="#build-in-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p><code>pytest --fixtures</code>可以列出所有可用的 fixture,包括内置的、插件中的、以及当前项目定义的。</p> +<h3 id="capsys" class="heading-element"><span>capsys</span> + <a href="#capsys" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>capsys</code>可以捕捉测试 function 的标准输出</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_print</span><span class="p">(</span><span class="n">capsys</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;hello&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">out</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">capsys</span><span class="o">.</span><span class="n">readouterr</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="s1">&#39;hello&#39;</span> <span class="o">==</span> <span class="n">out</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="tmpdir" class="heading-element"><span>tmpdir</span> + <a href="#tmpdir" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>tmpdir</code>则可以自动创建临时文件夹</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_path</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="kn">from</span> <span class="nn">py._path.local</span> <span class="kn">import</span> <span class="n">LocalPath</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">,</span> <span class="n">LocalPath</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="kn">from</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="n">isdir</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">isdir</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">))</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="参考" class="heading-element"><span>参考</span> + <a href="#%e5%8f%82%e8%80%83" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><ul> +<li><a href="http://note.qidong.name/2018/01/pytest-fixture/"target="_blank" rel="external nofollow noopener noreferrer">《Pytest 中的 Fixture》</a></li> +<li><a href="http://senarukana.github.io/2015/05/29/pytest-fixture/"target="_blank" rel="external nofollow noopener noreferrer">《Pytest Fixture》</a></li> +<li><a href="https://docs.pytest.org/en/latest/fixture.html#fixture-finalization-executing-teardown-code"target="_blank" rel="external nofollow noopener noreferrer">《pytest fixtures: explicit, modular, scalable》</a></li> +</ul> \ No newline at end of file diff --git "a/tags/\346\265\213\350\257\225/index.html" "b/tags/\346\265\213\350\257\225/index.html" index 4f804ff..90b45b2 100644 --- "a/tags/\346\265\213\350\257\225/index.html" +++ "b/tags/\346\265\213\350\257\225/index.html" @@ -1,5 +1,5 @@ 测试 - 标签 - 洋葱的自留地 -

测试 1

2019

0%
\ No newline at end of file diff --git "a/tags/\346\265\213\350\257\225/index.xml" "b/tags/\346\265\213\350\257\225/index.xml" index fefbe91..ddb3701 100644 --- "a/tags/\346\265\213\350\257\225/index.xml" +++ "b/tags/\346\265\213\350\257\225/index.xml" @@ -1,2 +1,326 @@ -测试 - 标签 - 洋葱的自留地http://xiaolong.fun/tags/%E6%B5%8B%E8%AF%95/洋葱的自留地Hugo 0.137.0 & FixIt v0.3.14zh-CNSat, 16 Mar 2019 00:00:00 +0000Pytest Fixture Notehttp://xiaolong.fun/posts/pytest-fixture-note/Sat, 16 Mar 2019 00:00:00 +0000http://xiaolong.fun/posts/pytest-fixture-note/笔记测试<p>最近在学习实践自动化相关的知识,最终选用 pytest 来组织测试用例。</p> -<p>本文是 pytest 学习笔记的第一篇。</p> \ No newline at end of file +测试 - 标签 - 洋葱的自留地http://xiaolong.fun/tags/%E6%B5%8B%E8%AF%95/洋葱的自留地7616145989362176075511352571992064Hugo 0.137.1 & FixIt v0.3.14zh-CNSat, 16 Mar 2019 00:00:00 +0000Pytest Fixture Notehttp://xiaolong.fun/posts/pytest-fixture-note/Sat, 16 Mar 2019 00:00:00 +0000http://xiaolong.fun/posts/pytest-fixture-note/笔记测试<img src="http://xiaolong.fun/images/posts/pytest-fixture-note/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><p>最近在学习实践自动化相关的知识,最终选用 pytest 来组织测试用例。</p> +<p>本文是 pytest 学习笔记的第一篇。</p> +<p>Fixture 是 pytest 中的一个基本概念,可以简单理解为在测试用例前需要执行的内容,我用来初始化环境、准备数据等工作。</p> +<h2 id="fixture" class="heading-element"><span>Fixture</span> + <a href="#fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p>在被当做 fixture 的函数前面加上<code> @pytest.fixture</code>来定义一个 Fixture</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">before</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">before each test&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="scope" class="heading-element"><span>Scope</span> + <a href="#scope" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li>function:每个 test 都运行,默认是 function 的 scope</li> +<li>class:每个 class 的所有 test 只运行一次</li> +<li>module:每个 module 的所有 test 只运行一次</li> +<li>session:每个 session 只运行一次</li> +</ul> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span><span class="lnt">11 +</span><span class="lnt">12 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&#34;module&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#yield下面是teardown内容</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_ehlo</span><span class="p">(</span><span class="n">smtp</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"><span class="c1">#fixture的function名称,可以直接作为参数,传给需要使用它的测试样例。 在使用时,smtp并非前面定义的function,而是function的返回值,即smtplib.SMTP</span> +</span></span><span class="line"><span class="cl"> <span class="n">response</span><span class="p">,</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">smtp</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">response</span> <span class="o">==</span> <span class="mi">250</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="sa">b</span><span class="s2">&#34;smtp.gmail.com&#34;</span> <span class="ow">in</span> <span class="n">msg</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="conftestpy" class="heading-element"><span>conftest.py</span> + <a href="#conftestpy" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>conftest.py</code>是 pytest 的默认配置文件,可以在其中放公用的 fixture 或 plugin。</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span><span class="lnt">6 +</span><span class="lnt">7 +</span><span class="lnt">8 +</span><span class="lnt">9 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tests +</span></span><span class="line"><span class="cl">├── conftest.py +</span></span><span class="line"><span class="cl">├── test_a.py +</span></span><span class="line"><span class="cl">├── test_b.py +</span></span><span class="line"><span class="cl">└── sub +</span></span><span class="line"><span class="cl"> ├── __init__.py +</span></span><span class="line"><span class="cl"> ├── conftest.py +</span></span><span class="line"><span class="cl"> ├── test_c.py +</span></span><span class="line"><span class="cl"> └── test_d.py</span></span></code></pre></td></tr></table> +</div> +</div><p><code>conftest.py</code>遵守就近原则,会优先使用层级最近的 conftest 中定义的 Fixture。同时外层的测试用例 a,b 不能使用内层<code>conftest.py</code>中定义的 fixture</p> +<h2 id="use-fixture" class="heading-element"><span>Use Fixture</span> + <a href="#use-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h3 id="1-当做参数直接调用" class="heading-element"><span>1. 当做参数直接调用</span> + <a href="#1-%e5%bd%93%e5%81%9a%e5%8f%82%e6%95%b0%e7%9b%b4%e6%8e%a5%e8%b0%83%e7%94%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">scope</span><span class="o">=</span><span class="s2">&#34;module&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_ehlo</span><span class="p">(</span><span class="n">smtp</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">response</span><span class="p">,</span> <span class="n">msg</span> <span class="o">=</span> <span class="n">smtp</span><span class="o">.</span><span class="n">ehlo</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">response</span> <span class="o">==</span> <span class="mi">250</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="sa">b</span><span class="s2">&#34;smtp.gmail.com&#34;</span> <span class="ow">in</span> <span class="n">msg</span></span></span></code></pre></td></tr></table> +</div> +</div><p>fixture 的 function 名称,可以直接作为参数,传给需要使用它的测试样例。 在使用时,<code>smtp</code>并非前面定义的 function,而是 function 的返回值,即<code>smtplib.SMTP</code></p> +<h3 id="2-在函数前用-fixture-decorator-调用" class="heading-element"><span>2. 在函数前用 Fixture Decorator 调用</span> + <a href="#2-%e5%9c%a8%e5%87%bd%e6%95%b0%e5%89%8d%e7%94%a8-fixture-decorator-%e8%b0%83%e7%94%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span><span class="lnt">11 +</span><span class="lnt">12 +</span><span class="lnt">13 +</span><span class="lnt">14 +</span><span class="lnt">15 +</span><span class="lnt">16 +</span><span class="lnt">17 +</span><span class="lnt">18 +</span><span class="lnt">19 +</span><span class="lnt">20 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_1</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Test1</span><span class="p">:</span> +</span></span><span class="line"><span class="cl"> <span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_3</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"> <span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_4</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_2()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="nd">@pytest.mark.usefixtures</span><span class="p">(</span><span class="s2">&#34;before&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Test2</span><span class="p">:</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_5</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_1()&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">test_6</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;test_2()&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="3-用-autouse-调用-fixture" class="heading-element"><span>3. 用 Autouse 调用 Fixture</span> + <a href="#3-%e7%94%a8-autouse-%e8%b0%83%e7%94%a8-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p>fixture decorator 一个 optional 的参数是<code>autouse</code>, 默认设置为 False。 +当默认为 False,就可以选择用上面两种方式来试用 fixture。 +当设置为 True 时,在一个 session 内的所有的 test 都会自动调用这个 fixture。</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">autouse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">before</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">before each test&#39;</span><span class="p">)</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="finallizer" class="heading-element"><span>Finallizer</span> + <a href="#finallizer" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">fin</span><span class="p">():</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#释放函数</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span> <span class="p">(</span><span class="s2">&#34;teardown smtp&#34;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="n">request</span><span class="o">.</span><span class="n">addfinalizer</span><span class="p">(</span><span class="n">fin</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="c1">#测试完成后调用</span> +</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">smtp</span></span></span></code></pre></td></tr></table> +</div> +</div><p>通过<code>addfinallizer()</code>注册释放函数</p> +<h2 id="parametrizing" class="heading-element"><span>Parametrizing</span> + <a href="#parametrizing" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p>fixture 可以通过参数化来循环使用预设的参数</p> +<h3 id="1-params" class="heading-element"><span>1. params</span> + <a href="#1-params" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span><span class="lnt">6 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="nd">@pytest.fixture</span><span class="p">(</span><span class="n">params</span><span class="o">=</span><span class="p">[</span><span class="s2">&#34;smtp.gmail.com&#34;</span><span class="p">,</span> <span class="s2">&#34;mail.python.org&#34;</span><span class="p">])</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">smtp</span><span class="p">(</span><span class="n">request</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span> <span class="o">=</span> <span class="n">smtplib</span><span class="o">.</span><span class="n">SMTP</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">param</span><span class="p">,</span> <span class="mi">587</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="k">yield</span> <span class="n">smtp</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span> <span class="p">(</span><span class="s2">&#34;finalizing </span><span class="si">%s</span><span class="s2">&#34;</span> <span class="o">%</span> <span class="n">smtp</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">smtp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></span></span></code></pre></td></tr></table> +</div> +</div><p>在<code> @pytest.fixture</code>中,指定参数<code>params</code>,就可以利用特殊对象(<code>request</code>)来引用<code>request.param</code>。 使用以上带参数的 smtp 的测试样例,都会被执行两次。</p> +<h3 id="2-pytestmarkparametrize" class="heading-element"><span>2. @pytest.mark.parametrize</span> + <a href="#2-pytestmarkparametrize" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt"> 1 +</span><span class="lnt"> 2 +</span><span class="lnt"> 3 +</span><span class="lnt"> 4 +</span><span class="lnt"> 5 +</span><span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">a</span> <span class="o">+</span> <span class="n">b</span> +</span></span><span class="line"><span class="cl"> +</span></span><span class="line"><span class="cl"><span class="nd">@pytest.mark.parametrize</span><span class="p">(</span><span class="s2">&#34;test_input, expected&#34;</span><span class="p">,</span> <span class="p">[</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="mi">2</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">],</span> <span class="mi">4</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"> <span class="p">([</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> <span class="mi">1</span><span class="p">),</span> +</span></span><span class="line"><span class="cl"><span class="p">])</span> +</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_add</span><span class="p">(</span><span class="n">test_input</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">expected</span> <span class="o">==</span> <span class="n">add</span><span class="p">(</span><span class="n">test_input</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">test_input</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="build-in-fixture" class="heading-element"><span>Build-in Fixture</span> + <a href="#build-in-fixture" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><p><code>pytest --fixtures</code>可以列出所有可用的 fixture,包括内置的、插件中的、以及当前项目定义的。</p> +<h3 id="capsys" class="heading-element"><span>capsys</span> + <a href="#capsys" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>capsys</code>可以捕捉测试 function 的标准输出</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_print</span><span class="p">(</span><span class="n">capsys</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;hello&#39;</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="n">out</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">capsys</span><span class="o">.</span><span class="n">readouterr</span><span class="p">()</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="s1">&#39;hello&#39;</span> <span class="o">==</span> <span class="n">out</span></span></span></code></pre></td></tr></table> +</div> +</div><h3 id="tmpdir" class="heading-element"><span>tmpdir</span> + <a href="#tmpdir" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><p><code>tmpdir</code>则可以自动创建临时文件夹</p> +<div class="highlight"><div class="chroma"> +<table class="lntable"><tr><td class="lntd"> +<pre tabindex="0" class="chroma"><code><span class="lnt">1 +</span><span class="lnt">2 +</span><span class="lnt">3 +</span><span class="lnt">4 +</span><span class="lnt">5 +</span></code></pre></td> +<td class="lntd"> +<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">test_path</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">):</span> +</span></span><span class="line"><span class="cl"> <span class="kn">from</span> <span class="nn">py._path.local</span> <span class="kn">import</span> <span class="n">LocalPath</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">,</span> <span class="n">LocalPath</span><span class="p">)</span> +</span></span><span class="line"><span class="cl"> <span class="kn">from</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="n">isdir</span> +</span></span><span class="line"><span class="cl"> <span class="k">assert</span> <span class="n">isdir</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tmpdir</span><span class="p">))</span></span></span></code></pre></td></tr></table> +</div> +</div><h2 id="参考" class="heading-element"><span>参考</span> + <a href="#%e5%8f%82%e8%80%83" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><ul> +<li><a href="http://note.qidong.name/2018/01/pytest-fixture/"target="_blank" rel="external nofollow noopener noreferrer">《Pytest 中的 Fixture》</a></li> +<li><a href="http://senarukana.github.io/2015/05/29/pytest-fixture/"target="_blank" rel="external nofollow noopener noreferrer">《Pytest Fixture》</a></li> +<li><a href="https://docs.pytest.org/en/latest/fixture.html#fixture-finalization-executing-teardown-code"target="_blank" rel="external nofollow noopener noreferrer">《pytest fixtures: explicit, modular, scalable》</a></li> +</ul> \ No newline at end of file diff --git "a/tags/\351\251\276\347\205\247/index.html" "b/tags/\351\251\276\347\205\247/index.html" index 925a7f1..a1e415f 100644 --- "a/tags/\351\251\276\347\205\247/index.html" +++ "b/tags/\351\251\276\347\205\247/index.html" @@ -1,5 +1,5 @@ 驾照 - 标签 - 洋葱的自留地 -

驾照 1

2021

0%
\ No newline at end of file diff --git "a/tags/\351\251\276\347\205\247/index.xml" "b/tags/\351\251\276\347\205\247/index.xml" index 41dfe1f..ceef7c8 100644 --- "a/tags/\351\251\276\347\205\247/index.xml" +++ "b/tags/\351\251\276\347\205\247/index.xml" @@ -1,3 +1,272 @@ -驾照 - 标签 - 洋葱的自留地http://xiaolong.fun/tags/%E9%A9%BE%E7%85%A7/洋葱的自留地Hugo 0.137.0 & FixIt v0.3.14zh-CNTue, 23 Mar 2021 00:00:00 +0000驾考宝典http://xiaolong.fun/posts/driver-note/Tue, 23 Mar 2021 00:00:00 +0000http://xiaolong.fun/posts/driver-note/笔记生活<p>在考驾照这件事情上,我真的是拖延症晚期发作。</p> +驾照 - 标签 - 洋葱的自留地http://xiaolong.fun/tags/%E9%A9%BE%E7%85%A7/洋葱的自留地7616145989362176075511352571992064Hugo 0.137.1 & FixIt v0.3.14zh-CNTue, 23 Mar 2021 00:00:00 +0000驾考宝典http://xiaolong.fun/posts/driver-note/Tue, 23 Mar 2021 00:00:00 +0000http://xiaolong.fun/posts/driver-note/笔记生活<img src="http://xiaolong.fun/images/posts/driver-note/cover.jpg" alt="featured image" referrerpolicy="no-referrer"><p>在考驾照这件事情上,我真的是拖延症晚期发作。</p> <p>从报名到开始考,前前后后过了 4 年时间。</p> -<p>为了中间能回忆起之前练得内容,就把每个考试想进行了记录。</p> \ No newline at end of file +<p>为了中间能回忆起之前练得内容,就把每个考试想进行了记录。</p> +<p>这篇文章也是因为有朋友询问,索性发到博客里,也算解救写博客的懒癌晚期,一举多得。</p> +<h2 id="科目一" class="heading-element"><span>科目一</span> + <a href="#%e7%a7%91%e7%9b%ae%e4%b8%80" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><ul> +<li> +<p>假一吊二撤三醉五逃终身</p> +</li> +<li> +<p>站 30 口 50 禁止停车</p> +</li> +<li> +<p>高速最低 60 最高 120 两车道,左 100-120,右 60-100 三车道,左 110-120,中 90-110,右 60-80</p> +</li> +<li> +<p>未逃逸:3 年以下;逃逸或情节特别恶劣:3-7 年;因逃逸致人死亡:7 年以上。</p> +</li> +<li> +<p>只要机动车上路行驶,就必须悬挂号牌,放置检验合格标志、保险标志,随车携带行驶证及驾驶证。缺少任何一项,交警都可依法扣留车辆。</p> +</li> +<li> +<p>有 90 日选 90 日,没 90 日选 30 日</p> +</li> +<li> +<p>题干中有驾驶证,选项中找驾驶证,选项中没有驾驶证找车</p> +</li> +<li> +<p>车牌,驾照,酒驾,逃逸,超速 12 分</p> +</li> +<li> +<p>应急车道,信号灯 6 分</p> +</li> +</ul> +<h2 id="科目二" class="heading-element"><span>科目二</span> + <a href="#%e7%a7%91%e7%9b%ae%e4%ba%8c" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h3 id="倒车入库" class="heading-element"><span>倒车入库</span> + <a href="#%e5%80%92%e8%bd%a6%e5%85%a5%e5%ba%93" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li> +<p>离合踩到底,挂挡,放手刹,压离合</p> +</li> +<li> +<p>前车盖压黄线,向右打满,车头调正后回方向盘</p> +</li> +<li> +<p>挂倒挡,压离合</p> +</li> +<li> +<p>左后视镜下沿和黄线 1 指时,向右打满</p> +</li> +<li> +<p>车身距左右平均后,方向盘回正</p> +</li> +<li> +<p>调整方向,入库</p> +</li> +</ol> +<h3 id="熄火启动" class="heading-element"><span>熄火,启动</span> + <a href="#%e7%86%84%e7%81%ab%e5%90%af%e5%8a%a8" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li>先离合踩到底,挂空挡,启动</li> +</ol> +<h3 id="侧边停车" class="heading-element"><span>侧边停车</span> + <a href="#%e4%be%a7%e8%be%b9%e5%81%9c%e8%bd%a6" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<h4 id="进" class="heading-element"><span>进</span> + <a href="#%e8%bf%9b" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ol> +<li> +<p>右后视镜红色角消失时向右打死</p> +</li> +<li> +<p>左后视镜出现红色标志回正</p> +</li> +<li> +<p>左后视镜后轮压线,向左打死,平行后停车</p> +</li> +</ol> +</li> +<li> +<h4 id="出" class="heading-element"><span>出</span> + <a href="#%e5%87%ba" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h4><ol> +<li> +<p>方向盘左打死不动,1 档,车前盖左边线压黄线回正</p> +</li> +<li> +<p>车盖中心(雨刮左侧)压黄线向右打一圈,头正后回正</p> +</li> +</ol> +</li> +</ul> +<h3 id="起步" class="heading-element"><span>起步</span> + <a href="#%e8%b5%b7%e6%ad%a5" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li> +<p>起步打左转向灯,</p> +</li> +<li> +<p>车子移动,打右转向灯,12 点钟正对停字</p> +</li> +<li> +<p>松离合,上坡,视线和两个杆子一条线,离合踩死,刹车踩死,拉手刹</p> +</li> +<li> +<p>打左转向灯,松手刹,松离合,车子抖动慢慢松刹车</p> +</li> +<li> +<p>过了坡开始下坡的时候离合踩到底,用刹车控制速度,左大灯往左边黄线靠</p> +</li> +<li> +<p>打右转向灯,右侧门把手和黄线平时右转打死</p> +</li> +</ol> +<h3 id="s-弯" class="heading-element"><span>S 弯</span> + <a href="#s-%e5%bc%af" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ol> +<li> +<p>车头要压住黄线向右打一圈</p> +</li> +<li> +<p>左灯要压到左边最突出部分时回正</p> +</li> +<li> +<p>左灯要压住右侧线时向向左打一圈,修正方向使右线沿着左灯方向</p> +</li> +<li> +<p>左灯压倒左线时回正</p> +</li> +<li> +<p>右侧后视镜下面压到右线,向右打满,然后回 1/4</p> +</li> +<li> +<p>出弯回正,头探出窗户看左轮,修正方向到贴着线,停在收费旁,打空挡,拉手刹</p> +</li> +</ol> +<h2 id="科目三" class="heading-element"><span>科目三</span> + <a href="#%e7%a7%91%e7%9b%ae%e4%b8%89" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h2><h3 id="场内" class="heading-element"><span>场内</span> + <a href="#%e5%9c%ba%e5%86%85" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>上车动一下远关灯</p> +</li> +<li> +<p>转向灯,鸣笛,离合,一档,手刹</p> +</li> +<li> +<p>上路后关转向灯</p> +</li> +<li> +<p>直线行驶,调整好方向再进,别动</p> +</li> +<li> +<p>超车,转向灯 3 秒,看后视镜再转</p> +</li> +<li> +<p>隧道,给小油,速度别太难了</p> +</li> +<li> +<p>出隧道后,加 4 档,上 40 码,然后减到 30 码,降到 3 档</p> +</li> +<li> +<p>直角转弯后,给小油稳定在 3 档</p> +</li> +<li> +<p>听指示 3 降 2,加油,2 升 3</p> +</li> +<li> +<p>学校区域,送来油门,左右摇头</p> +</li> +<li> +<p>右转向灯,在柱子前停下,左右摇头</p> +</li> +<li> +<p>树和肩膀平齐向右打死,千万别压线</p> +</li> +<li> +<p>出门前停在线前面,听指示</p> +</li> +</ul> +<h3 id="左" class="heading-element"><span>左</span> + <a href="#%e5%b7%a6" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>观察左右车流,走外圈</p> +</li> +<li> +<p>右转向灯,路口停下,换一档</p> +</li> +<li> +<p>人行道松开油门,左右观察</p> +</li> +<li> +<p>调头打转向灯,到调头的地方,稍微向右调一下方向,在横线前停下,看后视镜,起步时向左打死方向</p> +</li> +</ul> +<h3 id="右" class="heading-element"><span>右</span> + <a href="#%e5%8f%b3" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>观察左右车流,走内圈</p> +</li> +<li> +<p>左转向灯,路口停下,换一档</p> +</li> +<li> +<p>调头打转向灯,到调头的地方,在横线前停下,看后视镜,车头压线向左打死</p> +</li> +</ul> +<h3 id="回场内" class="heading-element"><span>回场内</span> + <a href="#%e5%9b%9e%e5%9c%ba%e5%86%85" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>提前松开离合器,加油上坡,换 2 档</p> +</li> +<li> +<p>公交车区域提前观察</p> +</li> +<li> +<p>靠边停车,别压线,人和地上白点对齐就停</p> +</li> +</ul> +<h3 id="其他" class="heading-element"><span>其他</span> + <a href="#%e5%85%b6%e4%bb%96" class="heading-mark"> + <svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg> + </a> +</h3><ul> +<li> +<p>尽量 3 档</p> +</li> +<li> +<p>能停就停</p> +</li> +<li> +<p>别忘了转向灯</p> +</li> +<li> +<p>别停在斑马线</p> +</li> +</ul> \ No newline at end of file