ตั้งค่าการทดสอบอัตโนมัติ CTS

ก่อนที่จะเรียกใช้การทดสอบ CTS อัตโนมัติได้ ให้เตรียมสภาพแวดล้อมจริง ตั้งค่าเวิร์กสเตชัน และกำหนดค่าอุปกรณ์ที่คุณกำลังทดสอบ

ตั้งค่าสภาพแวดล้อมจริง

การทดสอบ CTS บางอย่างกำหนดให้ต้องใช้อุปกรณ์ภายนอกที่ตั้งอยู่ใกล้กับ DUT วิธีตั้งค่าสภาพแวดล้อมจริง

  1. (ไม่บังคับ) หาก DUT รองรับ Bluetooth LE ให้วางบีคอน Bluetooth LE อย่างน้อย 3 ตัวภายใน 5 เมตรจาก DUT เพื่อทดสอบการสแกน Bluetooth LE นอกจากนี้

    • คุณไม่จำเป็นต้องกำหนดค่าหรือปล่อยสัญญาณใดๆ ที่เฉพาะเจาะจง
    • โดยบีคอนจะเป็นประเภทใดก็ได้ รวมถึง iBeacon, Eddystone หรือแม้แต่อุปกรณ์ที่จำลองบีคอน BLE
  2. วางโทรศัพท์ไว้หน้าฉาก เช่น ผนังหรือเพดาน โดยมี ระยะห่างเท่ากับระยะโฟกัสต่ำสุดของ DUT นอกจากนี้

    • ฉากต้องมีแสงสว่างเพียงพอเพื่อให้เซ็นเซอร์ภายใต้การทดสอบสามารถ เข้าถึงและคงค่าเฟรมเป้าหมายสูงสุดต่อวินาที (FPS) ที่กำหนดค่าไว้ตามที่ระบุใน CONTROL_AE_TARGET_FPS_RANGE
    • การตั้งค่านี้ใช้กับเซ็นเซอร์กล้องทั้งหมดที่รายงานโดย getCameraIdList เนื่องจากการทดสอบจะวนซ้ำในอุปกรณ์ที่ระบุและวัดประสิทธิภาพ ทีละรายการ
    • หาก DUT รองรับกล้องภายนอก เช่น เว็บแคม USB ให้เสียบกล้องภายนอกเมื่อเรียกใช้ CTS มิฉะนั้นการทดสอบ CTS จะล้มเหลว
  3. (ไม่บังคับ) หาก DUT รองรับระบบกำหนดตำแหน่งบนโลก (GPS) หรือระบบดาวเทียมนำทางทั่วโลก (GNSS) อื่นๆ ให้ส่งสัญญาณ GNSS ไปยัง DUT ที่ระดับสัญญาณที่เหมาะสมสำหรับการรับและการคำนวณตำแหน่ง นอกจากนี้

    • GPS ต้องเป็นไปตาม ICD-GPS-200C
    • สัญญาณ GNSS อาจเป็นประเภทใดก็ได้ รวมถึงเครื่องจำลองดาวเทียมหรือเครื่องทวนสัญญาณกลางแจ้ง
    • คุณวาง DUT ไว้ใกล้หน้าต่างเพื่อให้รับสัญญาณ GNSS จากดาวเทียมได้โดยตรง
  4. ตรวจสอบว่าเครือข่าย Wi-Fi รองรับ IPv4 และ IPv6 มีการเชื่อมต่ออินเทอร์เน็ต ที่มี DNS สำหรับ IPv4 และ IPv6 รองรับ IP มัลติแคสต์ และสามารถ ถือว่า DUT เป็นไคลเอ็นต์ที่แยกต่างหาก

    หากคุณไม่มีสิทธิ์เข้าถึงเครือข่าย IPv6 แบบเนทีฟ เครือข่ายผู้ให้บริการ IPv6 หรือ VPN เพื่อผ่านการทดสอบ IPv6 ให้ใช้ Wi-Fi AP และอุโมงค์ IPv6

  5. ตรวจสอบว่า DUT มีการตั้งค่าสถานะ UP, BROADCAST และ MULTICAST ในอินเทอร์เฟซ Wi-Fi

  6. ตรวจสอบว่าอินเทอร์เฟซ Wi-Fi มีการกำหนดที่อยู่ IPv4 และ IPv6 หากต้องการตรวจสอบพร็อพเพอร์ตี้ของอินเทอร์เฟซ Wi-Fi ให้เรียกใช้ adb shell ifconfig

  7. (ไม่บังคับ) หาก DUT รองรับ Wi-Fi STA หรือการทำงานพร้อมกันของ STA ให้ตั้งค่าเครือข่าย Wi-Fi อย่างน้อย 2 เครือข่าย เครือข่าย Wi-Fi เหล่านี้ต้องทำงานในย่านความถี่ที่แตกต่างกันโดยมี SSID ที่แตกต่างกัน หรือใน SSID เดียวกันโดยมี BSSID ที่แตกต่างกัน

  8. (ไม่บังคับ) หาก DUT รองรับระยะเวลารับส่งข้อมูล (RTT) ของ Wi-Fi ให้ตั้งค่าอุปกรณ์ที่รองรับ RTT ของ Wi-Fi ดังนี้

    1. วางอุปกรณ์ RTT ของ Wi-Fi ให้อยู่ภายในระยะ 40 ฟุตจาก DUT
    2. เปิดอุปกรณ์ RTT ของ Wi-Fi

    อุปกรณ์ 2 รุ่นที่แนะนำซึ่งรองรับ Wi-Fi RTT มีดังนี้ - Google Wifi - จุดเข้าใช้งาน fitlet2 ของ Compulab (ตั้งค่าแบนด์วิดท์เป็น 40 MHz ที่ 5 GHz)

ตั้งค่าเครื่องเดสก์ท็อป

ก่อนเรียกใช้การทดสอบอัตโนมัติของ CTS โปรดตรวจสอบว่าเครื่องเดสก์ท็อปของคุณมีคุณสมบัติตรงตามข้อกำหนดด้านฮาร์ดแวร์และระบบปฏิบัติการ และได้ติดตั้งซอฟต์แวร์ที่เหมาะสมตามที่อธิบายไว้ในส่วนต่อไปนี้

ข้อกำหนดของฮาร์ดแวร์ของ Meet

เครื่องเดสก์ท็อป CTS ควรเป็นไปตามหรือเกินกว่าข้อกำหนดด้านฮาร์ดแวร์ต่อไปนี้

  • ระบบ x86 64 บิต

  • พื้นที่ว่างในดิสก์อย่างน้อย 256 GB เพื่อรองรับจำนวนเคสทดสอบ CTS ที่เพิ่มขึ้นและการเพิ่มการจองพื้นที่ฮีปของ Java ใน Tradefed

  • RAM อย่างน้อย 32 GB

มีคุณสมบัติตรงตามข้อกำหนดของระบบปฏิบัติการ

  • เครื่องที่ใช้พัฒนาต้องใช้การกระจาย Linux แบบ 64 บิตที่มี GNU C Library (glibc) 2.17 ขึ้นไป

  • ควรตั้งค่าภาษาของระบบปฏิบัติการเป็น "ภาษาอังกฤษ" เพื่อให้ CTS แก้ไขเส้นทางได้อย่างถูกต้อง

ติดตั้งซอฟต์แวร์บนเดสก์ท็อป

วิธีติดตั้งซอฟต์แวร์เดสก์ท็อปที่เหมาะสมสำหรับ CTS

  1. ติดตั้งแพ็กเกจ FFmpeg เวอร์ชัน 5.1.3 ขึ้นไป

  2. ติดตั้งเวอร์ชันล่าสุดของ Android Debug Bridge (adb) และ Android Asset Packaging Tool (AAPT2) แล้วเพิ่มตำแหน่งของเครื่องมือเหล่านั้นลงในเส้นทางของระบบในเครื่องของคุณ

    1. ทำตามวิธีการที่จุดเริ่มต้นของเอกสารประกอบ SDK Manager เพื่อติดตั้งเครื่องมือบรรทัดคำสั่ง sdkmanager ลิงก์สำหรับดาวน์โหลดเครื่องมือบรรทัดคำสั่งอยู่ในส่วนเครื่องมือบรรทัดคำสั่งเท่านั้นที่ด้านล่างของหน้าดาวน์โหลด Android Studio
    2. อัปเดตเส้นทางระบบให้มีตำแหน่งของ sdkmanager ที่เพิ่งติดตั้งใหม่
    3. ใช้ sdkmanager เพื่อติดตั้งแพ็กเกจ platform-tools และ build-tools ล่าสุด ซึ่งแพ็กเกจเหล่านี้มี adb และ AAPT2 โปรดดูข้อมูลเกี่ยวกับการติดตั้งแพ็กเกจที่หัวข้อติดตั้งแพ็กเกจ
    4. อัปเดตเส้นทางให้รวมตำแหน่งของเครื่องมือ adb และ AAPT2 ที่เพิ่งติดตั้งใหม่
    5. ตรวจสอบว่า adb และ AAPT2 อยู่ในเส้นทางของคุณ
  3. ติดตั้ง ชุดพัฒนาซอฟต์แวร์ Java (JDK) เวอร์ชันที่เหมาะสม

  4. (ไม่บังคับ) สำหรับ Android 13 และ 14 ให้ติดตั้ง virtualenv ต้องใช้เครื่องมือ virtualenv สำหรับการทดสอบแบบหลายอุปกรณ์

  5. หากต้องการตรวจสอบว่าได้ติดตั้ง Python แล้ว ให้พิมพ์ python3 เวอร์ชัน Python และวันที่ควรปรากฏขึ้นเพื่อระบุว่าได้ติดตั้ง Python อย่างถูกต้องแล้ว

  6. ดาวน์โหลดและเปิดแพ็กเกจ CTS จาก การดาวน์โหลดชุดเครื่องมือทดสอบความเข้ากันได้ ที่ตรงกับเวอร์ชัน Android ของอุปกรณ์และอินเทอร์เฟซไบนารีของแอปพลิเคชัน (ABI) ทั้งหมดที่อุปกรณ์รองรับ

  7. ดาวน์โหลดและเปิดไฟล์สื่อ CTS เวอร์ชันล่าสุด ไฟล์สื่อประกอบด้วยวิดีโอคลิปจาก Big Buck Bunny ซึ่งมีลิขสิทธิ์ ของ Blender Foundation ภายใต้ สัญญาอนุญาตครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 3.0

  8. (ไม่บังคับ) เมื่อเรียกใช้ CTS เป็นครั้งแรก ระบบจะดาวน์โหลดไฟล์ CTS บางไฟล์ที่เกี่ยวข้องกับ Mainline แบบไดนามิก การดาวน์โหลดนี้จะเพิ่มเวลาในการรัน CTS อีก 10 นาทีขึ้นไป ทั้งนี้ขึ้นอยู่กับความเร็วของเครือข่าย

    หากไม่ต้องการให้ CTS ใช้เวลานานขึ้น คุณสามารถดาวน์โหลดไฟล์ CTS ที่เกี่ยวข้องกับ Mainline ก่อนเรียกใช้ CTS ดูข้อมูลเกี่ยวกับการดาวน์โหลดไฟล์ CTS ที่เกี่ยวข้องกับ Mainline ได้ที่ดาวน์โหลดไฟล์ CTS ที่เกี่ยวข้องกับ Mainline

เตรียม DUT

หลังจากตั้งค่าเครื่องเดสก์ท็อปแล้ว คุณต้องตั้งค่าและกำหนดค่า DUT

ตั้งค่า DUT

วิธีตั้งค่า DUT

  1. ตรวจสอบว่า DUT ใช้รูปภาพระบบที่อิงตามบิลด์ของผู้ใช้ที่ทราบว่าเข้ากันได้ (Android 4.0 ขึ้นไป) จาก ชื่อรหัส แท็ก และหมายเลขบิลด์ และ ใช้ตัวแปรบิลด์ user ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรบิลด์ได้ที่เลือกเป้าหมาย

  2. หาก DUT ใช้ Android 13 ขึ้นไป โปรดตรวจสอบว่าบิลด์มี ro.product.first_api_level ตั้งค่าเป็นระดับ API ที่อุปกรณ์เปิดตัวในเชิงพาณิชย์ หากต้องการตั้งค่านี้ ให้ทำการเปลี่ยนแปลงต่อไปนี้ในไฟล์ device.mk

    PRODUCT_SHIPPING_API_LEVEL := 21
    

    ข้อกำหนด CTS บางอย่างขึ้นอยู่กับบิลด์ที่อุปกรณ์จัดส่งมาตั้งแต่แรก ตัวอย่างเช่น อุปกรณ์ที่จัดส่งพร้อมบิลด์เวอร์ชันก่อนหน้า อาจได้รับการยกเว้นจากข้อกำหนดของระบบที่ใช้กับอุปกรณ์ที่จัดส่ง พร้อมบิลด์เวอร์ชันใหม่กว่า ดูค่าระดับ API ที่ถูกต้องได้ที่ ชื่อเวอร์ชัน แท็ก และหมายเลขบิลด์ ดูข้อมูลเพิ่มเติมเกี่ยวกับ ro.product.first_api_level ได้ที่ ระดับ API ของผู้ให้บริการ

    สำหรับ Android 10 หรือต่ำกว่า โปรดดูตั้งค่า CTS (AOSP 10 หรือต่ำกว่า)

  3. หากอุปกรณ์รองรับการจัดการแพ็กเกจ APEX ให้ทำดังนี้

    1. ดาวน์โหลดแพ็กเกจ APEX Shim สำหรับ Android เวอร์ชันและ สถาปัตยกรรมฮาร์ดแวร์ที่เฉพาะเจาะจง 2 คอลัมน์ด้านซ้ายในตารางแพ็กเกจ Shim มีลิงก์ไปยังแพ็กเกจสำหรับ ดาวน์โหลด
    2. คัดลอกแพ็กเกจที่ดาวน์โหลดไปยัง /system/apex
    3. เปลี่ยนชื่อไฟล์เป็น com.android.apex.cts.shim.apex
  4. หากอุปกรณ์ไม่รองรับการจัดการแพ็กเกจ APEX ให้ทำดังนี้

    1. ดาวน์โหลดแพ็กเกจ APEX Shim สำหรับ Android เวอร์ชันและสถาปัตยกรรมฮาร์ดแวร์ที่เฉพาะเจาะจง 2 คอลัมน์ทางด้านขวาในตารางแพ็กเกจ Shim มีลิงก์ไปยังแพ็กเกจสำหรับ ดาวน์โหลด
    2. คัดลอก CtsShim.apk ไปยัง /system/app/
    3. เปลี่ยนชื่อ CtsShim.apk เป็น CtsShimPrebuilt.apk
    4. คัดลอก CtsShimPriv.apk ไปยัง /system/priv-app/
    5. เปลี่ยนชื่อ CtsShimPriv.apk เป็น CtsShimPrivPrebuilt.apk
  5. หากอุปกรณ์รายงานองค์ประกอบที่ปลอดภัยมากกว่า 1 รายการ ให้ทำดังนี้

    1. ดาวน์โหลด google-cardlet.cap
    2. คัดลอกไฟล์ที่ดาวน์โหลดไปยัง /data/uicc/cardlets/
  6. หากอุปกรณ์รายงานองค์ประกอบที่ปลอดภัยมากกว่า 1 รายการ ให้ติดตั้ง แอปเพล็ตตัวอย่างลงในองค์ประกอบที่ปลอดภัยแบบฝัง (eSE) ของ DUT หรือลงในซิม การ์ดที่ DUT ใช้ ดูข้อมูลเพิ่มเติมได้ที่การทดสอบ CTS สำหรับ Secure Element

  7. หากอุปกรณ์ไม่มีหน้าจอในตัว ให้เชื่อมต่อ หน้าจอกับอุปกรณ์

  8. หากอุปกรณ์มีช่องเสียบการ์ดหน่วยความจำ ให้เสียบการ์ด SD ที่ว่างเปล่า ใช้การ์ด SD ที่รองรับบัสความเร็วสูงพิเศษ (UHS) ที่มีความจุ SDHC หรือ SDXC หรือการ์ดที่มีคลาสความเร็ว 10 ขึ้นไปเพื่อให้แน่ใจว่าการ์ดจะ ผ่าน CTS

  9. หากอุปกรณ์มีช่องใส่ซิมการ์ด ให้เสียบซิมการ์ดที่เปิดใช้งานแล้ว ลงในแต่ละช่อง หากอุปกรณ์รองรับ SMS ซิมการ์ดแต่ละใบต้องมี ฟิลด์หมายเลขของตัวเอง สำหรับอุปกรณ์ที่ใช้ Android 12 ขึ้นไป ซิมการ์ดทั้งหมด ต้องรองรับการจัดเก็บหมายเลขโทรด่วน (ADN) ซิม GSM และ USIM ที่มีไฟล์เฉพาะของโทรคมนาคม (DFTelecom) เป็นไปตามข้อกำหนดนี้

  10. ตรวจสอบว่าอุปกรณ์มีซิมที่มีสิทธิ์ของผู้ให้บริการ CTS ซึ่งเป็นไปตามข้อกำหนดที่ระบุไว้ในเตรียม UICC

กำหนดค่า DUT

ทำตามขั้นตอนต่อไปนี้เพื่อกำหนดค่า DUT สำหรับใช้กับ CTS

ใน DUT

  1. รีเซ็ตข้อมูลอุปกรณ์เป็นค่าเริ่มต้น

  2. ตั้งค่าภาษาของอุปกรณ์เป็นอังกฤษ (สหรัฐอเมริกา)

  3. หากอุปกรณ์รองรับการปรับแต่งแบบอักษรเริ่มต้น ให้ตรวจสอบว่าได้ตั้งค่าชุดแบบอักษรเริ่มต้น sans-serif เป็น Roboto

  4. หากอุปกรณ์มีฟีเจอร์ GPS, Wi-Fi หรือเครือข่ายมือถือ ให้เปิดการตั้งค่าตำแหน่ง

  5. เชื่อมต่อเครือข่าย Wi-Fi ที่รองรับ IPv6, สามารถถือว่า DUT เป็น ไคลเอ็นต์ที่แยกต่างหาก และมีการเชื่อมต่ออินเทอร์เน็ต ดูคำอธิบาย ของไคลเอ็นต์ที่แยกกันได้ที่ตั้งค่าสภาพแวดล้อมจริง

  6. ตรวจสอบว่าไม่ได้ตั้งรูปแบบการล็อกหรือรหัสผ่าน

  7. เปิดใช้การแก้ไขข้อบกพร่อง USB

    1. ไปที่การตั้งค่า > เกี่ยวกับโทรศัพท์ แล้วแตะหมายเลขบิลด์ 7 ครั้ง ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์จะปรากฏในหมวดหมู่การตั้งค่าระบบ

    2. แตะการแก้ไขข้อบกพร่อง USB

    หากต้องการเปิดใช้การแก้ไขข้อบกพร่องผ่าน USB ใน Android 10 หรือต่ำกว่า โปรดดูตั้งค่า CTS (AOSP 10 หรือต่ำกว่า)

  8. ตั้งเวลาเป็นรูปแบบ 12 ชั่วโมง

  9. เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอป > เปิดหน้าจอค้างไว้

  10. วิธีปิดใช้การยืนยันแอปผ่าน USB

    1. ไปที่ตัวเลือกสำหรับนักพัฒนาแอป

    2. แตะยืนยันแอปผ่าน USB

  11. ใน Android 13 ขึ้นไป ให้เปิดใช้โมเด็มจำลองโดยทำดังนี้

    1. ไปที่ตัวเลือกสำหรับนักพัฒนาแอป

    2. แตะอนุญาต Mock Modem

    การตั้งค่านี้จำเป็นสำหรับการทดสอบการโทรบางอย่าง

ในเครื่องเดสก์ท็อป ให้ทำดังนี้

  1. เปิดเบราว์เซอร์และปิดหน้าจอเริ่มต้นหรือหน้าจอการตั้งค่า

  2. เชื่อมต่อ DUT กับเครื่องเดสก์ท็อปโดยใช้สาย USB

  3. หากระบบแจ้งให้คุณยอมรับคีย์ RSA ที่อนุญาตการแก้ไขข้อบกพร่องผ่านคอมพิวเตอร์เครื่องนี้ ให้คลิกอนุญาตการแก้ไขข้อบกพร่องผ่าน USB

  4. ตั้งค่า Roboto2 เป็นแบบอักษร Sans-Serif โดยใช้การตั้งค่าที่ผู้ใช้เข้าถึงได้ (ไม่ซ่อน)

  5. คัดลอกไฟล์สื่อ CTS ไปยัง DUT โดยทำดังนี้

    1. ไปยัง (cd) เส้นทางที่ดาวน์โหลดและ คลายซิปไฟล์สื่อ
    2. เปลี่ยนสิทธิ์ของไฟล์

      chmod u+x copy_media.sh
      
    3. คัดลอกไฟล์โดยทำดังนี้

      • หากต้องการคัดลอกคลิปที่มีความละเอียดสูงสุด 720x480 ให้เรียกใช้คำสั่งต่อไปนี้

        ./copy_media.sh 720x480
      • หากไม่แน่ใจเกี่ยวกับความละเอียดสูงสุด ให้คัดลอกไฟล์ทั้งหมดโดยทำดังนี้

        ./copy_media.sh all
      • หากมี DUT หลายเครื่อง ให้เพิ่มตัวเลือกหมายเลขซีเรียล (-s) ของอุปกรณ์ที่เฉพาะเจาะจงต่อท้าย ตัวอย่างเช่น หากต้องการคัดลอกไฟล์ขนาดสูงสุด 720x480 ไปยังอุปกรณ์ที่มีหมายเลขซีเรียล 1234567 ให้เรียกใช้คำสั่งต่อไปนี้

        ./copy_media.sh 720x480 -s 1234567

ดาวน์โหลดไฟล์ CTS ที่เกี่ยวข้องกับ Mainline

วิธีดาวน์โหลดไฟล์ CTS ที่เกี่ยวข้องกับ Mainline

  1. รับระดับ Android API ในอุปกรณ์โดยเรียกใช้คำสั่งต่อไปนี้

    adb shell getprop ro.build.version.sdk
    
  2. ทำตามวิธีการในสคริปต์ download_mcts.sh เพื่อดาวน์โหลดไฟล์ CTS หลัก

    การดาวน์โหลดจะใช้เวลาอย่างน้อย 10 นาที ทั้งนี้ขึ้นอยู่กับความเร็วของเครือข่าย

แพ็กเกจซิม

ตารางต่อไปนี้แสดงแพ็กเกจที่พร้อมใช้งานสำหรับอุปกรณ์แต่ละเวอร์ชันและสถาปัตยกรรม

เวอร์ชันอุปกรณ์ แพ็กเกจ (หากรองรับ APEX) แพ็กเกจ (หากไม่รองรับ APEX)
เปิดระบบ x86 เปิดระบบ x86
Android 16 16-arm-release android16-x86-release android16-arm-CtsShim.apk

android16-arm-CtsShimPriv.apk

android16-x86-CtsShim.apk

android16-x86-CtsShimPriv.apk

Android 15 15-arm-release android15-x86-release android15-arm-CtsShim.apk

android15-arm-CtsShimPriv.apk

android15-x86-CtsShim.apk

android15-x86-CtsShimPriv.apk

Android 14 android14-arm-release android14-x86-release android14-arm-CtsShim.apk

android14-arm-CtsShimPriv.apk

android14-x86-CtsShim.apk

android14-x86-CtsShimPriv.apk

Android 13 android13-arm-release android13-x86-release android13-arm-CtsShim.apk

android13-arm-CtsShimPriv.apk

android13-x86-CtsShim.apk

android13-x86-CtsShimPriv.apk

Android 12 android12-arm-release android12-x86-release android12-arm-CtsShim.apk

android12-arm-CtsShimPriv.apk

android12-x86-CtsShim.apk

android12-x86-CtsShimPriv.apk

Android 11 android11-arm-release android11-x86-release android11-arm-CtsShim.apk

android11-arm-CtsShimPriv.apk

android11-x86-CtsShim.apk

android11-x86-CtsShimPriv.apk

Android 10 android10-release android10-arm-CtsShim.apk

android10-arm-CtsShimPriv.apk

android10-x86-CtsShim.apk

android10-x86-CtsShimPriv.apk

Android 9, O และ O-MR1 ไม่มี ไม่มี arm-CtsShim.apk

arm-CtsShimPriv.apk

x86-CtsShim.apk

x86-CtsShimPriv.apk

สิ่งต่อไปที่ควรทำ

หลังจากอ่านเอกสารนี้แล้ว ให้ไปที่เรียกใช้การทดสอบ CTS อัตโนมัติ