বানর রানার

লিগ্যাসি monkeyrunner টুলটি প্রোগ্রাম লেখার জন্য একটি API প্রদান করে যা Android কোডের বাইরে থেকে একটি Android ডিভাইস বা এমুলেটর নিয়ন্ত্রণ করে।

monkeyrunner টুলটি প্রাথমিকভাবে অ্যাপ্লিকেশান এবং ডিভাইসগুলিকে কার্যকরী/ফ্রেমওয়ার্ক স্তরে পরীক্ষা করার জন্য এবং ইউনিট টেস্ট স্যুট চালানোর জন্য ডিজাইন করা হয়েছে, তবে আপনি এটি অন্যান্য উদ্দেশ্যে ব্যবহার করতে পারেন। monkeyrunner দিয়ে, আপনি একটি পাইথন প্রোগ্রাম লিখতে পারেন যা একটি অ্যান্ড্রয়েড অ্যাপ বা পরীক্ষা প্যাকেজ ইনস্টল করে, এটি চালায়, এতে কীস্ট্রোক পাঠায়, এর ব্যবহারকারী ইন্টারফেসের স্ক্রিনশট নেয় এবং ওয়ার্কস্টেশনে স্ক্রিনশট সংরক্ষণ করে।

সতর্কতা: monkeyrunner API অপরিবর্তিত। আমরা পরিবর্তে অ্যাপ ক্রলার টুল বা UI অটোমেটর টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করার পরামর্শ দিই।

monkeyrunner টুলটি UI/Application Exerciser Monkey- এর সাথে সম্পর্কিত নয়, যা monkey টুল নামেও পরিচিত। monkey টুলটি সরাসরি ডিভাইস বা এমুলেটরে একটি adb শেলে চলে এবং ব্যবহারকারী এবং সিস্টেম ইভেন্টের ছদ্ম-এলোমেলো স্ট্রীম তৈরি করে। তুলনায়, monkeyrunner টুল একটি API থেকে নির্দিষ্ট কমান্ড এবং ইভেন্ট পাঠানোর মাধ্যমে একটি ওয়ার্কস্টেশন থেকে ডিভাইস এবং এমুলেটর নিয়ন্ত্রণ করে।

monkeyrunner টুল অ্যান্ড্রয়েড পরীক্ষার জন্য এই বৈশিষ্ট্যগুলি প্রদান করে:

  • একাধিক ডিভাইস নিয়ন্ত্রণ : monkeyrunner API একাধিক ডিভাইস বা এমুলেটর জুড়ে এক বা একাধিক টেস্ট স্যুট প্রয়োগ করতে পারে। আপনি শারীরিকভাবে সমস্ত ডিভাইস সংযুক্ত করতে পারেন বা একবারে সমস্ত এমুলেটর (বা উভয়) চালু করতে পারেন, প্রতিটির সাথে পালাক্রমে প্রোগ্রামে সংযোগ করতে পারেন এবং তারপর এক বা একাধিক পরীক্ষা চালাতে পারেন। আপনি প্রোগ্রামগতভাবে একটি এমুলেটর কনফিগারেশন শুরু করতে পারেন, এক বা একাধিক পরীক্ষা চালাতে পারেন এবং তারপর এমুলেটরটি বন্ধ করতে পারেন।
  • কার্যকরী পরীক্ষা : monkeyrunner একটি অ্যান্ড্রয়েড অ্যাপের একটি স্বয়ংক্রিয় স্টার্ট-টু-ফিনিশ পরীক্ষা চালাতে পারে। আপনি কীস্ট্রোক বা স্পর্শ ইভেন্ট সহ ইনপুট মান প্রদান করেন এবং স্ক্রিনশট হিসাবে ফলাফল দেখুন।
  • রিগ্রেশন টেস্টিং : monkeyrunner একটি অ্যাপ চালানোর মাধ্যমে এবং তার আউটপুট স্ক্রিনশটগুলিকে সঠিক বলে পরিচিত স্ক্রিনশটের সেটের সাথে তুলনা করে অ্যাপের স্থায়িত্ব পরীক্ষা করতে পারে।
  • এক্সটেনসিবল অটোমেশন : যেহেতু monkeyrunner একটি API টুলকিট, তাই আপনি Android ডিভাইসগুলি নিয়ন্ত্রণ করার জন্য Python-ভিত্তিক মডিউল এবং প্রোগ্রামগুলির একটি সিস্টেম বিকাশ করতে পারেন। monkeyrunner API নিজেই ব্যবহার করার পাশাপাশি, আপনি Android Debug Bridge এর মতো Android টুল কল করতে স্ট্যান্ডার্ড Python os এবং subprocess মডিউল ব্যবহার করতে পারেন।

    আপনি monkeyrunner API এ আপনার নিজস্ব ক্লাস যোগ করতে পারেন। এটি প্লাগইনগুলির সাথে সম্প্রসারিত মাঙ্কিরানার বিভাগে আরও বিশদে বর্ণনা করা হয়েছে।

monkeyrunner টুল Jython ব্যবহার করে, পাইথনের একটি বাস্তবায়ন যা জাভা প্রোগ্রামিং ভাষা ব্যবহার করে। Jython monkeyrunner API কে Android ফ্রেমওয়ার্কের সাথে সহজে ইন্টারঅ্যাক্ট করতে দেয়। Jython এর সাথে, আপনি API এর ধ্রুবক, ক্লাস এবং পদ্ধতিগুলি অ্যাক্সেস করতে পাইথন সিনট্যাক্স ব্যবহার করতে পারেন।

একটি সাধারণ বানররানার প্রোগ্রাম

এখানে একটি সাধারণ monkeyrunner প্রোগ্রাম যা একটি ডিভাইসের সাথে সংযোগ করে, একটি MonkeyDevice অবজেক্ট তৈরি করে। MonkeyDevice অবজেক্ট ব্যবহার করে, প্রোগ্রামটি একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্যাকেজ ইনস্টল করে, এর একটি ক্রিয়াকলাপ চালায় এবং কার্যকলাপে মূল ইভেন্ট পাঠায়। প্রোগ্রামটি তারপর ফলাফলের একটি স্ক্রিনশট নেয়, একটি MonkeyImage অবজেক্ট তৈরি করে। এই অবজেক্ট থেকে, প্রোগ্রামটি স্ক্রিনশট ধারণকারী একটি PNG ফাইল লেখে।

# Imports the monkeyrunner modules used by this program.
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

# Connects to the current device, returning a MonkeyDevice object.
device = MonkeyRunner.waitForConnection()

# Installs the Android package. Notice that this method returns a boolean, so you can test
# whether the installation worked.
device.installPackage('myproject/bin/MyApplication.apk')

# Sets a variable with the package's internal name.
package = 'com.example.android.myapplication'

# Sets a variable with the name of an Activity in the package.
activity = 'com.example.android.myapplication.MainActivity'

# Sets the name of the component to start.
runComponent = package + '/' + activity

# Runs the component.
device.startActivity(component=runComponent)

# Presses the Menu button.
device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)

# Takes a screenshot.
result = device.takeSnapshot()

# Writes the screenshot to a file.
result.writeToFile('myproject/shot1.png','png')

monkeyrunner API

monkeyrunner API com.android.monkeyrunner প্যাকেজে তিনটি মডিউলে রয়েছে:

  • MonkeyRunner : monkeyrunner প্রোগ্রামের জন্য ইউটিলিটি পদ্ধতির একটি ক্লাস। এই ক্লাসটি একটি ডিভাইস বা এমুলেটরের সাথে monkeyrunner সংযুক্ত করার জন্য একটি পদ্ধতি প্রদান করে। এটি একটি monkeyrunner প্রোগ্রামের জন্য UI তৈরি করার এবং অন্তর্নির্মিত সহায়তা প্রদর্শনের জন্য পদ্ধতিও প্রদান করে।
  • MonkeyDevice : একটি ডিভাইস বা এমুলেটর প্রতিনিধিত্ব করে। এই ক্লাসটি প্যাকেজ ইনস্টল এবং আনইনস্টল করার, একটি অ্যাক্টিভিটি শুরু করা এবং একটি অ্যাপে কীবোর্ড বা টাচ ইভেন্ট পাঠানোর পদ্ধতি প্রদান করে। আপনি পরীক্ষা প্যাকেজ চালানোর জন্য এই ক্লাস ব্যবহার করুন.
  • MonkeyImage : একটি স্ক্রিন ক্যাপচার ইমেজ প্রতিনিধিত্ব করে। এই ক্লাসটি স্ক্রীন ক্যাপচার করার, বিটম্যাপ ইমেজকে বিভিন্ন ফরম্যাটে রূপান্তর করার, দুটি MonkeyImage অবজেক্টের তুলনা করার এবং একটি ফাইলে একটি ইমেজ লেখার পদ্ধতি প্রদান করে।

একটি পাইথন প্রোগ্রামে, আপনি পাইথন মডিউল হিসাবে প্রতিটি ক্লাস অ্যাক্সেস করেন। monkeyrunner টুল স্বয়ংক্রিয়ভাবে এই মডিউলগুলি আমদানি করে না। একটি মডিউল আমদানি করতে, বিবৃতি from পাইথন ব্যবহার করুন:

from com.android.monkeyrunner import <module>

যেখানে <module> ক্লাসের নাম আপনি আমদানি করতে চান। আপনি কমা দিয়ে মডিউলের নাম আলাদা করে স্টেটমেন্ট from একই মডিউলে একাধিক মডিউল আমদানি করতে পারেন।

বানর রানার চালান

আপনি একটি ফাইল থেকে বা একটি ইন্টারেক্টিভ অধিবেশনে monkeyrunner স্টেটমেন্ট প্রবেশ করে monkeyrunner প্রোগ্রাম চালাতে পারেন। আপনি monkeyrunner কমান্ড ব্যবহার করে উভয়ই করেন, যা আপনার SDK ডিরেক্টরির tools/ সাবডিরেক্টরিতে পাওয়া যায়। যদি আপনি একটি যুক্তি হিসাবে একটি ফাইলের নাম প্রদান করেন, monkeyrunner কমান্ডটি পাইথন প্রোগ্রাম হিসাবে ফাইলের বিষয়বস্তু চালায়; অন্যথায়, এটি একটি ইন্টারেক্টিভ সেশন শুরু করে।

নিম্নোক্ত monkeyrunner কমান্ডের সিনট্যাক্স:

monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

সারণি 1 monkeyrunner পতাকা এবং যুক্তি ব্যাখ্যা করে।

সারণী 1. monkeyrunner পতাকা এবং যুক্তি

যুক্তি বর্ণনা
-plugin <plugin_jar> (ঐচ্ছিক) monkeyrunner এর জন্য একটি প্লাগইন ধারণকারী JAR ফাইল নির্দিষ্ট করে। monkeyrunner প্লাগইনগুলি সম্পর্কে আরও জানতে, প্লাগইনগুলির সাথে monkeyrunner প্রসারিত করুন বিভাগটি দেখুন৷ একাধিক ফাইল নির্দিষ্ট করতে, একাধিকবার যুক্তি অন্তর্ভুক্ত করুন।
<program_filename> যদি আপনি এই যুক্তি প্রদান করেন, monkeyrunner কমান্ডটি পাইথন প্রোগ্রাম হিসাবে ফাইলের বিষয়বস্তু চালায়। অন্যথায়, কমান্ড একটি ইন্টারেক্টিভ সেশন শুরু করে।
<program_options> (ঐচ্ছিক) <program_file> .

monkeyrunner অন্তর্নির্মিত সাহায্য

আপনি চালানোর মাধ্যমে monkeyrunner এর জন্য একটি API রেফারেন্স তৈরি করতে পারেন:

monkeyrunner help.py <format> <outfile>

যুক্তিগুলো হল:

  • <format> হয় প্লেইন টেক্সট আউটপুটের জন্য text অথবা HTML আউটপুটের জন্য html
  • <outfile> আউটপুট ফাইলের জন্য একটি পাথ-যোগ্য নাম।

প্লাগইন সহ monkeyrunner প্রসারিত করুন

আপনি জাভাতে যে ক্লাসগুলি লিখবেন এবং এক বা একাধিক JAR ফাইল তৈরি করবেন তার সাথে আপনি monkeyrunner API প্রসারিত করতে পারেন। আপনি আপনার নিজের ক্লাসের সাথে monkeyrunner API প্রসারিত করতে বা বিদ্যমান ক্লাসগুলি প্রসারিত করতে এই বৈশিষ্ট্যটি ব্যবহার করতে পারেন। আপনি monkeyrunner পরিবেশ শুরু করতে এই বৈশিষ্ট্যটি ব্যবহার করতে পারেন।

monkeyrunner কে একটি প্লাগইন প্রদান করতে, সারণি 1 এ বর্ণিত -plugin <plugin_jar> আর্গুমেন্ট সহ monkeyrunner কমান্ডটি ব্যবহার করুন।

আপনার প্লাগইন কোডে, আপনি com.android.monkeyrunner এ প্রধান monkeyrunner ক্লাস MonkeyDevice , MonkeyImage , এবং MonkeyRunner আমদানি এবং প্রসারিত করতে পারেন ( monkeyrunner API সম্পর্কে বিভাগটি দেখুন)।

মনে রাখবেন যে প্লাগইনগুলি আপনাকে Android SDK-এ অ্যাক্সেস দেয় না। আপনি com.android.app এর মতো প্যাকেজ আমদানি করতে পারবেন না। এর কারণ হল monkeyrunner ফ্রেমওয়ার্ক API-এর স্তরের নীচে ডিভাইস বা এমুলেটরের সাথে ইন্টারঅ্যাক্ট করে।

প্লাগইন স্টার্টআপ ক্লাস

একটি প্লাগইনের জন্য JAR ফাইল একটি ক্লাস নির্দিষ্ট করতে পারে যা স্ক্রিপ্ট প্রসেসিং শুরু হওয়ার আগে তাত্ক্ষণিক হয়। এই ক্লাসটি নির্দিষ্ট করতে, JAR ফাইলের ম্যানিফেস্টে কী MonkeyRunnerStartupRunner যোগ করুন। মানের জন্য, স্টার্টআপে চালানোর জন্য ক্লাসের নাম ব্যবহার করুন। নিম্নলিখিত স্নিপেটটি দেখায় কিভাবে একটি ant বিল্ড স্ক্রিপ্টের মধ্যে এটি করতে হয়:

<jar jarfile="myplugin" basedir="${build.dir}">
<manifest>
<attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/>
</manifest>
</jar>


monkeyrunner টুলের রানটাইম পরিবেশে অ্যাক্সেস পেতে, স্টার্টআপ ক্লাস com.google.common.base.Predicate<PythonInterpreter> প্রয়োগ করতে পারে। উদাহরণস্বরূপ, এই ক্লাসটি ডিফল্ট নামস্থানে কিছু ভেরিয়েবল সেট আপ করে:

কোটলিন

package com.android.example

import com.google.common.base.Predicate
import org.python.util.PythonInterpreter

class Main: Predicate<PythonInterpreter> {

    override fun apply(anInterpreter: PythonInterpreter): Boolean {
        /*
         * Examples of creating and initializing variables in the monkeyrunner environment's
         * namespace. During execution, the monkeyrunner program can refer to the variables
         * "newtest" and "use_emulator"
         *
         */
        anInterpreter.set("newtest", "enabled")
        anInterpreter.set("use_emulator", 1)
        return true
    }
}

জাভা

package com.android.example;

import com.google.common.base.Predicate;
import org.python.util.PythonInterpreter;

public class Main implements Predicate<PythonInterpreter> {
    @Override
    public boolean apply(PythonInterpreter anInterpreter) {

        /*
        * Examples of creating and initializing variables in the monkeyrunner environment's
        * namespace. During execution, the monkeyrunner program can refer to the variables "newtest"
        * and "use_emulator"
        *
        */
        anInterpreter.set("newtest", "enabled");
        anInterpreter.set("use_emulator", 1);

        return true;
    }
}