مسخره کردن ساده از دستورات در اسکریپت های پوسته

مسخره کردن ساده از دستورات در اسکریپت های پوسته


تصور کنید که یک اسکریپت پوسته دارید که گزارش آن است
ایجاد شده و جایی در گزارش منبع داده است
`نام میزبان [ یا $ (نام میزبان) . شما یک آزمون می نویسید ، یکی
گزارش تازه ایجاد شده را با نسخه قبلی مقایسه می کند.

همه چیز در رایانه شخصی شما خوب است ، اما در
سرور ساخت مرکزی در خط لوله CI ، آزمایش انجام نشد ،
زیرا نام میزبان نتیجه متفاوتی در آنجا می دهد.

چه کاری انجام دهیم؟

عملکرد به عنوان یک مسخره

اگر نام میزبان را بدست آورید تا مقدار دلخواه را به دست بیاورید ،
شما برنده شد البته شما فقط نمی توانید نام واقعی خود را بدست آورید
فقط سیستم را برای اجرای تست تنظیم کنید. در عوض شما مجبور هستید
ما به نوعی دستور آزمایش جعلی نام میزبان را دادیم
تشویقی که دقیقاً آنچه را که ما می خواهیم خرج می کند. (که صدا می کند
سپس را مسخره کنید .)

می توانید یک اسکریپت پوسته کوچک بنویسید ، نام نام میزبان و
جایی در فرمان $ PATH قبل از فرمان واقعی نام میزبان
(برای آن احتمالاً باید ابتدا $ PATH را تنظیم کنید. در
چندین فرمان مورد تمسخر ، به سرعت آن را به یک باغ وحش کوچک تبدیل می کند
اسکریپت های کوتاه پوسته. شما می توانید مانند آن انجام دهید ، اما هنوز هم به عهده من است

به جای اسکریپت پوسته ، می توان عملکرد پوسته را مقایسه کرد
نامهایی بسازید که سپس صادر می شوند ، به عنوان مثال بنابراین:

  1. نام میزبان ([)
  2. {
  3. echo 'hostname.invalid'
  4. }
  5. صادرات ]]

اگر اسکریپت مورد آزمایش نیز یک اسکریپت پوسته است ،
عملکرد تعریف شده بر نام اصلی نام میزبان غلبه دارد ، مهم نیست که کجا باشد

برنامه های کاربردی

اگر چنین روش ساده ای برای مسخره کردن دارید ، می توانید این کار را انجام دهید
استفاده همه کاره:

نامزد واضح تاریخ است ، زیرا تاریخ و زمان در
آزمایشات همیشه معنی دارند. از نظر كلاسیك ، می توان تاریخ تاریخ را تعیین كرد
نادیده گرفتن glibc توسط $ LD_PRELOAD (به عنوان مثال توسط faketime ). در
برنامه هایی که تدوین شده نیز ضروری است – برای آزمایش این افراد
اسکریپت های شل به احتمال زیاد از یک تابع (یا $ PATH و روشی استفاده می کنند
اسکریپت) اما بسیار آسان تر و مهمتر از همه قابل حمل.

اگر می خواهید زمان های مختلفی در آزمون داشته باشید ، می توانید
متغیر را در داخل تابع یا مورد دلخواه افزایش دهید
زمان را از متغیری که می تواند با تست کنترل کند بخوانید.

(من فقط هنگام نوشتن این سطرها توجه می کنم: bash می تواند تاریخ باشد.
 و زمان در مورد printf٪ (fmt) T و نه انعطاف پذیر
 فرمان داخلی است و بنابراین احتمالاً سریعتر از آن است
 برنامه خارجی تاریخ . تا کنون ، داخلی printf
 مورد علاقه من است ، اما اگر می خواهم در آزمون انعطاف پذیر باشم ، باید
 ترجیح می دهید از تاریخ استفاده کنید.)

گزینه دیگر ایجاد اطلاعات آزمایش گسترده است
یدکی به عنوان مثال ، اگر فیلمنامه ای دارید که از آن خارج می شود
شما تجزیه و پردازش کرده اید ، سپس می توانید برای آزمون ثبت نام کنید
دایرکتوری با فایل های آزمایشی ایجاد کنید و با [واقعی du در آن تماس بگیرید.
اگر می خواهید از اندازه کلی بازی کنید ، این کمی فراتر از حد یک است
آزمایشات – سرور build از شما متشکرم. در عوض می توانید du
با یک عملکرد پوسته که به سادگی عملکردی را که می خواهید جایگزین کنید
خروجی درخت پرونده بدون اینکه واقعاً وجود داشته باشد.

نتیجه گیری

توابع پوسته صادر شده خود را به دستورات خارجی وام می دهد.
در تست هایی با عملکرد مسخره.

من قطعاً اولین کسی نیستم که به این ایده رسیدم
اما حداقل برای خودم پیش اومد 🙂 فکر میکنم درسته
ظریف و عملی و قبلاً آن را در عمل به کار گرفته است.